webentwicklung-frage-antwort-db.com.de

Schwerwiegender Fehler: Das NSArray-Element konnte nicht mit dem Array-Elementtyp Swift= übereinstimmen

Plötzlich habe ich angefangen, Laufzeitfehler zu bekommen,

fatal error: NSArray element failed to match the Swift Array Element type

Ich habe mein Array wie folgt deklariert:

var myArray : [CUSTOM_CLASS] = [CUSTOM_CLASS]()

Nun habe ich in meinem Server Antwort Erfolg Block,

self.myArray = dicResponse["data"]! as Array

println(self.myArray) // FATAL ERROR HERE

Was vor dem Upgrade auf Xcode6 Beta6 perfekt funktionierte

FYI : dicResponse["data"]! // is verified as valid

(Tut mir leid, dass ich vorher auf eine falsche Stelle hingewiesen habe!)

Gelöst:

Weiß nicht, aber ich habe ein paar Änderungen vorgenommen und es funktioniert,

var myArray = [AnyObject]()

self.myArray = dicResponse["data"]! as [AnyObject]
27
BaSha

Wenn ich Teejays Antwort mit weiteren Informationen ergänzen könnte. Dieser Fehler:

fatal error: NSArray element failed to match the Swift Array Element type

wird durch eine Typinkongruenz verursacht.

Zum Beispiel, nachdem Sie auf Ihren Array-Typ Swift gewirkt haben:

    myPersonList = aDictionary["persons"] as [Person]

Zugriff auf den Wert in aDictionary basierend auf dem Schlüssel "persons", Swift erwartet ein Array vom Typ Person. Dies wird ohne Probleme kompiliert und ausgeführt.

Wenn der Typ jedoch später in Ihrem Code beim Zugriff auf das Array-Element myPersonList nicht wie angegeben ist - in meinem Beispiel Person -, stürzt die Ausführung mit dem obigen Fehler ab.

Fazit: Sie haben mit ziemlicher Sicherheit den falschen Typ in der Besetzung angegeben. Untersuchen Sie Ihr Dictionary-Objekt, um festzustellen, was es wirklich enthält.

20
Max MacLeod

Wenn Sie mit Cocoa-APIs arbeiten, erhalten Sie immer ein NSArray, das nicht ist.

Sie müssen dieses Array also in ein Typified Swift Array umwandeln.

Sie sollten in der Lage sein, diesen Code zu kompilieren:

var myArray : [CUSTOM_CLASS] = [CUSTOM_CLASS]()

self.myArray = dicResponse["data"]! as [CUSTOM_CLASS]

Auf diese Weise wird jedes Array-Element in ein CUSTOM_CLASS - Objekt umgewandelt.

4
Teejay

TL; DR: Wird auch durch das Mischen der Binärdateien von Xcode 7 und Xcode 7.1 verursacht.

Dies wurde bereits beantwortet, aber ich habe gerade diesen Fehler in den Eingeweiden von Alamofire für eine Array-Besetzung einer gültigen [Zeichenfolge] erhalten.

In meinem Fall habe ich Carthage verwendet und nicht bemerkt, dass xcode-select immer noch auf das absturzfreundliche Xcode 7 zeigt. Das Aktualisieren von xcode-select auf Xcode 7.1B hat mein Problem behoben.

1
Chris Conover

Könnte es sich um einen Konflikt zwischen dem Typ Swift= und dem von ObjectiveC handeln? Weil ich eine ähnliche Situation beim Schleifen eines [NSMutableDisctionary] Mit .forEach{} Und for ... in Weg, aber es gab mir den gleichen Fehler (NSArray element failed to match the Swift Array Element type). Als ich den Typ auf [Dictionary<String,Any>] Änderte, funktionierte alles gut. Nun wurde [] In Swift eingeführt, und Typen mit dem Präfix NS... in ObjectiveC.