是否可以让struct的行为像对象一样。 F.e:
var arr = [1]
let arr1 = arr
arr.append(1)
我想让arr1和arr一样。包装成对象是唯一的选择吗?
答案 0 :(得分:6)
你所描述的是Swift中结构和对象之间行为的根本区别之一。结构总是按值复制。所以不,如果你想通过引用语义进行复制,你将不得不使用一个对象。
答案 1 :(得分:2)
除了@ChrisK的回答之外,我没有看到从不同变量引用相同数组的许多实际用法,除非你想要实现的是将它传递给函数/方法 - 在这种情况下,您可以使用inout
修饰符
var array = [1, 2, 3]
func changeArray(inout array: [Int]) {
array.append(4)
}
changeArray(&array)
更新您在评论中提到了一个非常好的用例。这导致我找到了一个解决方案,这更像是一种解决方法 - 重要的是它的工作原理。
使用NSMutableArray
代替swift数组。它是一个类,所以它具有您正在寻找的所有优势。来自游乐场的示例:
var arr: NSMutableArray = [
NSMutableArray(array: [1, 2, 3])
]
arr[0].addObject(4)
arr[0].replaceObjectAtIndex(0, withObject: -1)
arr // This prints [[-1, 2, 3, 4]]