致命错误:NSArray元素无法匹配Swift数组元素types

突然我开始得到运行时错误,

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

我宣布我的arrays为,

 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 

是由types不匹配造成的。

例如有投到您的Swift数组types:

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

在基于关键"persons"访问aDictionary中的值,Swift希望得到一个Persontypes的数组 。 这将编译和执行没有问题。

然而,当你访问myPersonList数组元素的时候,如果这个types不是指定的,那么在你的代码中,在我的例子Person中 ,那么执行就会崩溃,出现上面的错误。

底线:你几乎可以肯定的在演员中指定了错误的types。 检查你的字典对象,看看它真的包含了什么。

如果你正在使用Cocoa APIs,你总是会收到一个没有代表性的NSArray

所以,你需要把这个数组转换成一个典型的Swift数组。

你应该能够编译这个代码:

 var myArray : [CUSTOM_CLASS] = [CUSTOM_CLASS]() self.myArray = dicResponse["data"]! as [CUSTOM_CLASS] 

这样,每个数组元素被转换为一个CUSTOM_CLASS对象。

TL; DR:也是由混合Xcode 7和Xcode 7.1二进制文件引起的。

这已经被回答了,但是我刚刚在Alamofire的肠胃里得到了一个有效[String]的数组。

在我的情况下,我使用迦太基,并没有意识到xcodeselect仍然指向快速Xcode 7。更新xcodeselect到Xcode 7.1B解决了我的问题。

Interesting Posts