将特定类型的对象添加到Swift中的泛型数组<any>?</any>

时间:2015-02-15 19:25:43

标签: ios arrays swift casting

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

实施例

&#34; SpecificItemType&#34;

类型的对象数组
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)

2 个答案:

答案 0 :(得分:3)

编译器无法解决

上的类型约束
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的预期类型不同,即{{1}在这种情况下。

答案 1 :(得分:0)

首先将任意更改为 AnyObject ,然后尝试以下操作:

matchedResults += (results as [AnyObject])