Arrays 如何添加到Swift中以任意形式存储的数组中

Arrays 如何添加到Swift中以任意形式存储的数组中,arrays,swift,any,Arrays,Swift,Any,我有一位会员,出于必要,属于Any: var type: MyValueType var value: Any! 值的一种可能类型是数组 如何添加到存储在value中的数组 我试过施法,但施法的结果被认为是let常量 使用此选项: if var arr = (value as! Array<Int>) { ... } 如果var arr=(值为!数组){…} 也不起作用,因为arr是数组的副本,而不是数组本身 当然,我可以再次将arr赋值给value,但这不会产生不必要的复制吗

我有一位会员,出于必要,属于
Any

var type: MyValueType
var value: Any!
值的一种可能类型是
数组
如何添加到存储在value中的数组

我试过施法,但施法的结果被认为是let常量

使用此选项:

if var arr = (value as! Array<Int>) { ... }
如果var arr=(值为!数组){…}
也不起作用,因为arr是数组的副本,而不是数组本身


当然,我可以再次将
arr
赋值给
value
,但这不会产生不必要的复制吗?

您可以选择将数组绑定到一个临时变量,进行变异,然后将临时变量重新赋值

var value : Any!

value = [1, 2, 3]

if var intArray = value as? [Int] {
    intArray.append(4)
    value = intArray
}
在这种情况下,不必要的复制是必要的


另一种选择是基于协议的解决方案。一切都比
Any

好,我认为不可能将Any类型转换为[Int]的可变版本,因此需要在append之后重新分配值。由于Swift数组使用的“写时拷贝”策略,不必要的复制实际上非常快。这是一个O(1)空间/时间运算。哦,好吧,根据美学原理,我将简单地创建第二个“值”,即“arrayValue”,用于数组的,然后。。。谢谢大家!事实上,不必要的复制可能会在发布版本中得到优化。