35

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

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]
4

4 に答える 4

20

Teejayの回答にさらに情報を追加できれば。このエラー:

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

型の不一致が原因です。

たとえば、Swift 配列型にキャストすると、次のようになります。

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

key に基づいて aDictionary の値にアクセスすると"persons"、Swift はPerson 型の配列を受け取ることを期待します。これはコンパイルされ、問題なく実行されます。

ただし、コードの後半でmyPersonList配列要素にアクセスするときに、タイプが指定されていない場合 (私の例のPersonでは) 、上記のエラーで実行がクラッシュします。

結論: キャストで間違った型を指定したことはほぼ確実です。ディクショナリ オブジェクトを調べて、実際に何が含まれているかを確認します。

于 2014-09-11T10:47:21.217 に答える
4

Cocoa API を使用している場合は、常に を受け取りますがNSArray、これは類型化されていません。

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

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

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

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

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

于 2014-08-25T15:24:25.413 に答える
1

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

これはすでに回答されていますが、有効な [String] の配列キャストに対して Alamofire の腸でこのエラーが発生しました。

私の場合、carthage を使用していましたが、xcode-select がまだクラッシュに強い Xcode 7 を指していることに気付きませんでした。xcode-select を Xcode 7.1B に更新すると、問題が解決しました。

于 2015-09-24T16:42:49.590 に答える