突然,我开始得到运行时错误,因为,
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]
如果我能用一些进一步的信息补充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中 - 那么执行将因上面的错误而崩溃。
底线:你几乎肯定在演员表中指定了错误的类型。检查您的字典对象以查看它真正包含的内容。
如果你正在使用Cocoa API,你总会得到一个NSArray
,它不是典型的。
因此,您需要将该数组转换为Typified Swift Array。
您应该能够编译此代码:
var myArray : [CUSTOM_CLASS] = [CUSTOM_CLASS]()
self.myArray = dicResponse["data"]! as [CUSTOM_CLASS]
这样,每个数组元素都被转换为CUSTOM_CLASS
对象。
TL; DR:也是由混合Xcode 7和Xcode 7.1二进制文件引起的。
这已经得到了回答,但是我在Alamofire的内部得到了一个有效[String]数组的错误。
在我的情况下,我使用carthage并没有意识到xcode-select仍然指向崩溃快乐的Xcode 7.更新xcode-select到Xcode 7.1B解决了我的问题。
这可能是swift类型和ObjectiveC之间的冲突吗?因为我经历了类似的情况试图用[NSMutableDisctionary]
和.forEach{}
方式循环for ... in
,但它给了我同样的错误(NSArray element failed to match the Swift Array Element type
)。当我改变类型为[Dictionary<String,Any>]
一切都运作良好。现在,[]
在Swift中引入,并在ObjectiveC中使用前缀NS...
。