Установка перечисления битовой маски, объявленного в 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 ...