突然、実行時エラーが発生し始めました。
fatal error: NSArray element failed to match the Swift Array Element type
配列を次のように宣言しました。
var myArray : [CUSTOM_CLASS] = [CUSTOM_CLASS]()
さて、私のサーバー応答成功ブロックには、
self.myArray = dicResponse["data"]! as Array
println(self.myArray) // FATAL ERROR HERE
Xcode6 Beta6にアップグレードする前に完璧に機能していました
FYI : dicResponse["data"]! // is verified as valid
(前に間違った場所を指すのはごめんなさい!)
解決済み:
わからないが、私はいくつかの変更を加えて、それが動作します
var myArray = [AnyObject]()
self.myArray = dicResponse["data"]! as [AnyObject]
Teejayの回答を補足情報で補足できる場合。このエラー:
fatal error: NSArray element failed to match the Swift Array Element type
タイプの不一致が原因です。
たとえば、Swift配列タイプにキャストした場合:
myPersonList = aDictionary["persons"] as [Person]
キー"persons"
に基づいてaDictionaryの値にアクセスすると、Swiftは型Personの配列を受け取ることを期待します。これはコンパイルされ、問題なく実行されます。
ただし、後のコードでmyPersonList
配列要素にアクセスするときに、型が指定されていない場合(この例ではPerson)、実行は上記のエラーでクラッシュします。
一番下の行:キャストで間違った型を指定したことはほぼ間違いありません。辞書オブジェクトを調べて、実際に含まれているものを確認してください。
Cocoa APIを使用している場合、常にNSArray
を受け取ります。これは、not typifiedです。
そのため、その配列をTypified Swift配列にキャストする必要があります。
このコードをコンパイルできるはずです:
var myArray : [CUSTOM_CLASS] = [CUSTOM_CLASS]()
self.myArray = dicResponse["data"]! as [CUSTOM_CLASS]
このようにして、各配列要素はCUSTOM_CLASS
オブジェクトにキャストされます。
TL; DR:Xcode 7とXcode 7.1のバイナリが混在していることも原因です。
これはすでに回答されていますが、有効な[String]の配列キャストのために、Alamofireの腸でこのエラーを受け取りました。
私の場合、carthageを使用していて、xcode-selectがまだクラッシュしたXcode 7を指していることに気付いていませんでした。
Swift typeとObjectiveCのtypeの間の競合でしょうか?[NSMutableDisctionary]
と.forEach{}
の両方でfor ... in
でループしようとする同様の状況を経験したため方法、しかし、それは私にあなたの同じエラーを与えました(NSArray element failed to match the Swift Array Element type
)。タイプを[Dictionary<String,Any>]
に変更したとき、すべてはうまくいきました。今、[]
がSwiftで導入され、プレフィックスNS...
ObjectiveCで。