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