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

时间:2014-08-25 11:08:44

标签: ios swift ios8 xcode6-beta6 xcode6-beta5

突然间我开始出现运行时错误,

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 个答案:

答案 0 :(得分:20)

如果我能用一些进一步的信息来补充Teejay的回答。这个错误:

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

是由类型不匹配引起的。

例如,对你的Swift数组类型进行强制转换:

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

根据键"persons"访问字典中的值,Swift希望接收 Person类型的数组。这将编译并将毫无问题地执行。

但是,稍后在代码中访问myPersonList数组元素时,如果类型不是指定的 - 在我的示例 Person 中 - 则执行将因上述错误而崩溃。

底线:你几乎肯定在演员表中指定了错误的类型。检查您的字典对象以查看其真正包含的内容。

答案 1 :(得分:4)

如果您正在使用Cocoa API,则始终会收到NSArray,其中不是典型。

因此,您需要将该数组转换为Typified Swift Array。

您应该能够编译此代码:

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

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

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

答案 2 :(得分:1)

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

这已经得到了解答,但我在Alamofire的内容中得到了一个有效[String]数组的错误。

在我的情况下,我使用的是carthage并且没有意识到xcode-select仍然指向崩溃快乐的Xcode 7.更新xcode-select到Xcode 7.1B解决了我的问题。

答案 3 :(得分:0)

快速类型与ObjectiveC的类型之间是否会发生冲突? 因为我遇到过类似的情况,试图同时以[NSMutableDisctionary].forEach{}的方式在for ... in上循环,但这给了你同样的错误(NSArray element failed to match the Swift Array Element type)。当我将类型更改为[Dictionary<String,Any>]时,一切正常。现在,在Swift中引入了[],在ObjectiveC中引入了前缀为NS...的类型。