ios - 将特定类型的对象添加到 Swift 中的泛型 Array<Any>?

标签 ios arrays swift casting

如何将特定类型的对象添加到通用Array:[Any]?我的理解是 Any 应该能够包含任何其他对象。它是否正确?不幸的是,当我将特定对象添加到通用数组时,我收到一条错误消息。

例子

“SpecificItemType”类型的对象数组

var results:[SpecificItemType] = []
... // adding various objects to this array

这些对象的通用目标数组

var matchedResults:[Any] = []
matchedResults += results

错误信息

[Any] is not identical to UInt8

这里有什么问题?错误消息并没有真正帮助。

还有一点要注意:有趣的是,可以使用 append 添加单个对象。所以下面的作品

matchedResults.append(results.first)

最佳答案

编译器无法解析类型约束

func +=<T, C : CollectionType where T == T>(inout lhs: ContiguousArray<T>, rhs: C)

因为您正在尝试将 [SpecificType] 添加到 [Any],因此 T != T

您可以通过向上转换最具体的数组来解决这个问题。

var r = results.map { $0 as Any }
matchedResults += r

关于令人费解的错误,这是由于 += 运算符的重载造成的。编译器尝试解析运算符的各种版本,最终在这里找到这个版本:

func +=(inout lhs: UInt8, rhs: UInt8)

可能这是它试图解决的最后一个,所以它在这里抛出一个错误,告诉你 [Any]lhs 的预期类型不同,即UInt8 在这种情况下。

关于ios - 将特定类型的对象添加到 Swift 中的泛型 Array<Any>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28530146/

相关文章:

ios - 从 UDP 服务器消息中检索字符串

swift - 核心数据在存在时更新现有对象

ios - 设置 UIActivityIndi​​catorView 背景

arrays - JSON 数组列转换为 JSON 对象

c - 使用 C 将数据文件存储到二维数组中

objective-c - 需要一种更高效的方法来将大量 float 存储到数组中并将它们读回

swift - 无法在 macOS 的 Swift 应用程序中请求日历事件访问权限(通过 EKEventStore)

ios - 如何使我的随机索引在整个数组中取得进展?

iPhone - UIScrollView ...检测触摸坐标

ios - 更新时跟踪 NSManagedObject 属性并立即更新 View