Установка перечисления битовой маски, объявленного в target-c из swift

Я пытаюсь использовать Parse SDK для iOS в моем новом проекте. Он имеет viewController со свойством enum;

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"

Итак, как правильно установить такие свойства?

3 ответа

Решение

У меня была такая же проблема, как и у вас. Смотрите этот ответ, чтобы узнать, как установить PFLogInFields в Свифте. У меня это сработало!!

Последовательные перечисления в Objective-C должны быть реорганизованы для использования NS_ENUMи перечисления битовых полей должны быть реорганизованы для использования NS_OPTIONS,

Вы должны изменить

typedef enum {
    //...
} PFLogInFields;

в

typedef NS_OPTIONS(NSInteger, PFLogInFields) {
    //...
};

В Swift вы должны добавлять префиксы к типу. Я не уверен, работает ли это автоматически с импортом Objective C, но это может:

logInViewController.fields = PFLogInFields.PFLogInFieldsTwitter | ...

Если бы библиотека была перенесена в стандарт Swift, поля уже ожидали PFLoginFields и элементы enum будут определены таким образом, чтобы вы могли написать

logInViewController.fields = .Twitter | .Facebook ...
Другие вопросы по тегам