2014-12-02 10 views
21

C'è anche la possibilità di utilizzare la parola chiave "dove" in un altro posto e poi un interruttore? Posso usarlo in un ciclo for in ad esempio?Posso usare 'where' all'interno di un ciclo for in swift?

Ho un array con bools, tutte del valore, posso fare qualcosa di simile:

var boolArray: [Bool] = [] 

//(...) set values and do stuff 


for value where value == true in boolArray { 
    doSomething() 
} 

Questo sarebbe molto più bello di utilizzare un caso, quindi mi chiedo se c'è una possibilità da usare dove in combinazione con un ciclo for. Ty per il tuo tempo.

+2

'per il valore in boolArray .filter() {$ 0 == true} 'Mi piace? –

+0

@BenjaminGruenbaum Wow yeah grazie, questo è molto bello e swifty! – Simon

+0

Contento di aver potuto aiutare - volevo solo essere chiaro questo è quello che vuoi - aggiungendo una risposta –

risposta

52

In Swift 2, è stato aggiunto nuovo where sintassi:

for value in boolArray where value == true { 
    ... 
} 

In Pre 2.0 una soluzione sarebbe quella di chiamare .filter sulla matrice prima di eseguire iterazioni che:

for value in boolArray.filter({ $0 == true }) { 
    doSomething() 
} 
+2

Buona soluzione. Per quanto riguarda lo stile, suggerirei * non * l'uso della sintassi della chiusura finale: in questo modo è più chiaro quale insieme di parentesi è il corpo del ciclo 'for':' per il valore in boolArray.filter ({$ 0 == true}) {doSomething()} ' – rickster

+0

Ben, puoi dirmi perché il ciclo for sottostante non viene eseguito? Inoltre, la vista non viene riconosciuta automaticamente come UIBarButtonItem. per la vista in self.view.subviews dove view.isKindOfClass (UIBarButtonItem) { view.enabled = false } –

+0

bel punto e virgola;) – mafiOSo