web-dev-qa-db-ja.com

致命的なエラー:NSArray要素はSwift Array Elementタイプと一致しませんでした

突然、実行時エラーが発生し始めました。

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]
27
BaSha

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)、実行は上記のエラーでクラッシュします。

一番下の行:キャストで間違った型を指定したことはほぼ間違いありません。辞書オブジェクトを調べて、実際に含まれているものを確認してください。

20
Max MacLeod

Cocoa APIを使用している場合、常にNSArrayを受け取ります。これは、not typifiedです。

そのため、その配列をTypified Swift配列にキャストする必要があります。

このコードをコンパイルできるはずです:

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

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

このようにして、各配列要素はCUSTOM_CLASSオブジェクトにキャストされます。

4
Teejay

TL; DR:Xcode 7とXcode 7.1のバイナリが混在していることも原因です。

これはすでに回答されていますが、有効な[String]の配列キャストのために、Alamofireの腸でこのエラーを受け取りました。

私の場合、carthageを使用していて、xcode-selectがまだクラッシュしたXcode 7を指していることに気付いていませんでした。

1
Chris Conover

Swift typeとObjectiveCのtypeの間の競合でしょうか?[NSMutableDisctionary].forEach{}の両方でfor ... inでループしようとする同様の状況を経験したため方法、しかし、それは私にあなたの同じエラーを与えました(NSArray element failed to match the Swift Array Element type)。タイプを[Dictionary<String,Any>]に変更したとき、すべてはうまくいきました。今、[]がSwiftで導入され、プレフィックスNS... ObjectiveCで。