0

我正在尝试在我的新项目中使用 Parse SDK for iOS。它具有带有 enum 属性的 viewController;

typedef enum {
    PFLogInFieldsNone = 0,
    PFLogInFieldsUsernameAndPassword = 1 << 0,
    PFLogInFieldsPasswordForgotten = 1 << 1,
    PFLogInFieldsLogInButton = 1 << 2,
    PFLogInFieldsFacebook = 1 << 3,
    PFLogInFieldsTwitter = 1 << 4,
    PFLogInFieldsSignUpButton = 1 << 5,
    PFLogInFieldsDismissButton = 1 << 6,

    PFLogInFieldsDefault = PFLogInFieldsUsernameAndPassword | PFLogInFieldsLogInButton |      PFLogInFieldsSignUpButton | PFLogInFieldsPasswordForgotten | PFLogInFieldsDismissButton
 } PFLogInFields;

根据Objective-C中的教程,我应该以这种方式设置它:

 [logInViewController setFields: PFLogInFieldsTwitter | PFLogInFieldsFacebook | PFLogInFieldsDismissButton];

我正在尝试以这种方式(使用 swift):

loginViewController.fields = PFLogInFieldsTwitter | PFLogInFieldsFacebook | PFLogInFieldsDismissButton

但我收到错误:“'PFLogInFields' 不能转换为 'Bool'”

那么,设置此类属性的正确方法是什么?

4

3 回答 3

2

Objective-C 中的连续枚举应该重构为 use NS_ENUM,位域枚举应该重构为 use NS_OPTIONS

你应该改变

typedef enum {
    //...
} PFLogInFields;

typedef NS_OPTIONS(NSInteger, PFLogInFields) {
    //...
};
于 2014-08-25T20:26:11.410 回答
1

我和你有同样的问题。请参阅此答案以了解如何PFLogInFields在 Swift 中进行设置。它对我有用!

于 2014-08-26T06:49:47.520 回答
0

在 Swift 中,你必须在枚举前面加上 Type。我不确定这是否适用于 Objective-C 导入,但它可能:

logInViewController.fields = PFLogInFields.PFLogInFieldsTwitter | ...

如果该库被移植到 Swift 标准,那么这些字段已经是预期PFLoginFields的,并且枚举项将以某种方式定义,以便您可以编写

logInViewController.fields = .Twitter | .Facebook ...
于 2014-08-25T10:21:11.100 回答