2015-09-03 7 views
5

kompilieren Wie kann ich niedergeschlagenen Array von AnyObjectArrays auf Anordnung von StringArrays?Swift - gesenkten Array von Arrays nicht

i den folgenden Code versucht:

let v1:[[AnyObject]] = [["hello"]] // v1 type is [[AnyObject]] 
let v2 = v1 as! [[String]]   // compile error! 

aber dieser Code wird mit einem Fehler nicht kompilieren:

, wenn ich niedergeschlagenen Array von AnyObject auf Anordnung von String nur versuchen, es funktioniert gut:

let v1:[AnyObject] = ["hello"] // v1 type is [AnyObject] 
let v2 = v1 as! [String]  // v2 type is [String] as expected 

Antwort

9

Sie haben bereits Ihre eigene Frage beantwortet. Führe im ersten Code jedes Element des Arrays aus, was du im zweiten Code erfolgreich machst. Wie folgt:

let v2 = v1.map {$0 as! [String]} 
+0

danke matt, das löste den Compiler Fehler)) Weißt du, ob es Performance-Hit hat? Ist das ein vernünftiger Weg das Casting zu machen? – Eyal

+2

Es macht genau das gleiche, was Gießen tut. Dein 'wie! [String] ist nichts anderes als eine Kurzschrift, ein bisschen syntaktischer Zucker; Die Laufzeit _must_ durchläuft das _whole_ Array, um jedes Element einzeln zu erzeugen. Das ist _exactly_ das gleiche, nicht mehr und nicht weniger. Der einzige Unterschied ist, dass wir keine magische Kurzschrift bekommen haben. – matt

+1

10x das war sehr hilfreich – Eyal