Sto cercando di ridurre una serie di Bool
s applicando l'operatore logico OR (||
) utilizzando il seguente codice, tuttavia si ottiene un errore:Uso operatore logico come combinare chiusura nel ridurre
func reduceBools(values: [Bool]) -> Bool {
return values.reduce(false, combine: ||)
}
Ambiguous reference to member '||'
Analogamente per i numeri interi il codice funziona come un incantesimo.
func reduceInts(values: [Int]) -> Int {
return values.reduce(0, combine: +)
}
sono stato in grado di farlo funzionare con l'aggiunta di una funzione ||
(codice qui sotto) o con una chiusura { $0 || $1 }
ma non mi piace questi approcci e preferirei semplicemente passando l'operatore.
func ||(lhs: Bool, rhs: Bool) -> Bool {
return lhs || rhs
}
La stessa cosa succede per l'operatore logico AND (&&
).
Come posso farlo funzionare senza utilizzare l'hack sopra?
Questo sembra essere un bug/limitazione dovuta ai parametri "autoclosure" di '||' e '' &&. Confronta http://stackoverflow.com/questions/28648268/questo-è-il-tipo-del-commercial-operatori e i seguenti commenti. –
@ MartinR grazie per il collegamento! Stavo pensando, che sono solo un uomo stupido ... – user3441734
@ Martin che sembra essere il caso:/C'è qualche rdar su di esso in modo che possa ingannarlo? – fpg1503