突然间我开始出现运行时错误,
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]
答案 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...
的类型。