2015-07-05 4 views
6

Ho dispone di una condizione logica:Maniglia unica condizione il resto in rapida 'se andiamo' utilizzando 'dove'

if let login = login where validateLogin(login) { 
    // I'm not interesting with this condition 
} else { 
    // This is interesting 
} 

c'è qualche possibilità di scrivere in qualche modo, se lasciate condizione di non gestire vera condizione (perché non voglio fare qualcosa con quello)? Quindi, qualcosa come la negazione:

!(if let login = login where validateLogin(login)) { 
    // This is interesting 
} 

Grazie per l'aiuto.

+0

A meno che non mi manca qualcosa qui, bisogna tentare: 'se lasciare il login = login dove validateLogin (! login) '. Notare il '!' Prima di '='. Fammi sapere se lo fa. – Ares

+0

Viene visualizzato un errore se si effettua il login! = Login. – edzio27

+0

No, se let aValue = anOptional è un'istruzione di corrispondenza del modello, non un confronto. Se anOptional contiene un valore, associa il valore a un nome e inserisce il blocco. –

risposta

5

La prima filiale a vostra se la condizione è fatto reale da 2 criteri:

  • if let è un assegno di non nullo
  • where è uno zucchero sintattico per una condizione di follow-up, quando è possibile assicurati che la variabile non sia nulla.

È possibile invertire la logica in questo modo:

if login == nil || !validateLogin(login!) { 
    // do something 
} 
7

In Swift 1.2 qualcosa come questo non è possibile, ma è possibile utilizzare:

// since where is logically the same as && 
if !(login != nil && validateLogin(login!)) { 
    // This is interesting 
} 

// or 
if login == nil || !validateLogin(login!) { 
    // This is interesting 
} 

che è logicamente lo stesso del vostro desiderato implementazione. Nota: poiché sia ​​l'operatore && sia l'operatore || avvolgono il lato destro dell'espressione in una chiusura, lo scostamento della forza è persino "sicuro".

In attesa di Swift 2 si ottiene un nuovo guard dichiarazione che gestisce la parte penale della prima:

guard let login = login where validateLogin(login) else { 
    // This is interesting 
} 

// use the unwrapped login here if you want 
+3

Nota anche: con l'istruzione guard devi avere una funzione 'return',' break', 'continue' o' @ noreturn' all'interno del corpo else – Kametrixom