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,它不是典型的。

因此,您需要将该数组转换为典型的 Swift 数组。

您应该能够编译此代码:

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

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

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

于 2014-08-25T15:24:25.413 回答
1

Could it be a conflict between swift type and ObjectiveC's one? Because I experienced a similar situation trying to loop on a [NSMutableDisctionary] both with .forEach{} and for ... in way, but it gave me your same error (NSArray element failed to match the Swift Array Element type). When I changed the type to [Dictionary<String,Any>] all worked well. Now, [] was introduced in Swift, and types with prefix NS... in ObjectiveC.

于 2019-03-21T09:01:27.507 回答
1

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

这已经得到了回答,但是我刚刚在 Alamofire 的内部得到了这个错误,因为一个有效的 [String] 的数组转换。

就我而言,我使用的是 carthage,但没有意识到 xcode-select 仍然指向崩溃的 Xcode 7。将 xcode-select 更新到 Xcode 7.1B 解决了我的问题。

于 2015-09-24T16:42:49.590 回答