2014-06-10 16 views
7

Cercando di incorporare Parse in un nuovo progetto Swift.Swift: impossibile trovare un sovraccarico per '|' accetta gli argomenti forniti

Quando arrivo a questo blocco:

logInViewController.fields = PFLogInFieldsUsernameAndPassword | PFLogInFieldsLogInButton | PFLogInFieldsSignUpButton | PFLogInFieldsPasswordForgotten 

sto ottenendo questo errore in XCode 6:

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

Chiunque capita di sapere cosa c'è di sbagliato in questo la sintassi?

risposta

8

Utilizzare il .value quindi utilizzare il risultato di creare un'istanza PFLogInFields: risposta

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

impressionante! grazie!! –

2

di Timothy è giusto, ma è meglio correggere il codice con l'aggiornamento di Swift.

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

Secondo modo:

È possibile utilizzare l'overloading degli operatori per il codice più corto:

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)! 
} 

E ancora:

logInViewController.fields = .UsernameAndPassword + .LogInButton 

o

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

Sembra che questo sia un obiettivo mobile, in quanto nessuna delle risposte qui sembra funzionare più. Al momento devo usare questo:

logInViewController.fields = PFLogInFields.UsernameAndPassword | PFLogInFields.LogInButton 
+1

Questo non sembra funzionare per me in swift 2.0 – elsurudo

2

In Swift 2 sembra che la soluzione accettata o altre risposte non funzionano. Ho risolto il mio problema racchiudendo PFLogInFields in un array. Tutto sembra funzionare bene.

Così, invece di:

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

ho scritto:

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

Spostamento target ... – uchuugaka

+0

Dovresti anche essere in grado di evitare il prefisso 'PFLogInFields' nel caso in cui tu imposti il ​​valore come una matrice – Kevin

Problemi correlati