Swift: не удалось найти перегрузку для '|' который принимает предоставленные аргументы

Попытка включить Parse в новый проект Swift.

Когда я доберусь до этого блока:

logInViewController.fields = PFLogInFieldsUsernameAndPassword | PFLogInFieldsLogInButton | PFLogInFieldsSignUpButton | PFLogInFieldsPasswordForgotten

Я получаю эту ошибку в XCode 6:

Could not find an overload for '|' that accepts the supplied arguments

Кто-нибудь знает, что не так с этим синтаксисом?

4 ответа

Решение

Использовать .value затем используйте результат, чтобы создать PFLogInFields пример:

logInViewController.fields = PFLogInFields(PFLogInFieldsUsernameAndPassword.value 
    | PFLogInFieldsLogInButton.value)

В Swift 2 кажется, что принятое решение или другие ответы не работают. Я решил свою проблему, заключив PFLogInFields в массив. Кажется, все работает нормально.

Так что вместо:

    loginViewController.fields = PFLogInFields.UsernameAndPassword | PFLogInFields.LogInButton | PFLogInFields.PasswordForgotten | PFLogInFields.SignUpButton | PFLogInFields.Facebook | PFLogInFields.Twitter

Я написал:

   loginViewController.fields = [PFLogInFields.UsernameAndPassword, PFLogInFields.LogInButton, PFLogInFields.PasswordForgotten, PFLogInFields.SignUpButton, PFLogInFields.Facebook, PFLogInFields.Twitter]

Ответ Тимофея правильный, но лучше исправить код с помощью обновления Swift.

logInViewController.fields = PFLogInFields(rawValue: 
PFLogInFieldsUsernameAndPassword.rawValue | 
PFLogInFieldsLogInButton.rawValue)

Второй способ:

Вы можете использовать перегрузку оператора для более короткого кода:

func +=(inout slf: PFLogInFields,other: PFLogInFields)-> PFLogInFields{
    slf = PFLogInFields(rawValue: slf.rawValue | other.rawValue)!
}

func +(a: PFLogInFields, b: PFLogInFields)-> PFLogInFields{
    return PFLogInFields(rawValue: a.rawValue | b.rawValue)!
}

И далее:

logInViewController.fields = .UsernameAndPassword + .LogInButton

или же

logInViewController.fields = .UsernameAndPassword
logInViewController.fields += .LogInButton

Кажется, это движущаяся цель, так как ни один из ответов здесь, кажется, больше не работает. В настоящее время я должен использовать это:

logInViewController.fields =  PFLogInFields.UsernameAndPassword | PFLogInFields.LogInButton
Другие вопросы по тегам