2016-07-02 15 views
4

Wenn ich mit diesem Snippet berechnen möchte, ob alle Bool s in der Liste true sind, warum werden die Typen nicht korrekt abgeleitet?Mehrdeutige Referenz auf Element &&

let bools = [false, true, false, true] 
let result = bools.reduce(true, combine: &&) 
+0

Ich schlage vor, dass Sie [hier] (http://stackoverflow.com/a/34699637/5654848) suchen. Es wird ausführlich erklärt. – Dershowitz123

+1

Du kannst das einfach als 'let result =! Bools..contains (false)' schreiben, was mit Mehrdeutigkeit btw kompiliert :) Aber definitiv daran interessiert, warum das mehrdeutig ist. – Hamish

Antwort

1

begegnete ich das gleiche vor einer Weile Fehler (aber dann mit ||). Wenn Sie reduce für diese verwenden möchten, ist die einfachste Lösung

let result = bools.reduce(true, combine: { $0 && $1 }) 

oder

let result = bools.reduce(true) { $0 && $1 } 

statt zu schreiben. Wie in den Kommentaren darauf hingewiesen, können Sie auch

let result = !bools.contains(false) 

verwenden Dies ist nicht nur besser lesbar, aber es ist auch effizienter, weil es bei der ersten Begegnung von false anstatten Iteration über das gesamte Array (obwohl das stoppen Compiler könnte dies optimieren).