是否有可能避免迅速结构变异?
问题描述:
是否有可能让结构像对象一样行为。 F.e .:是否有可能避免迅速结构变异?
var arr = [1]
let arr1 = arr
arr.append(1)
我想让arr1与arr相同。是唯一的选择包装到一个对象?
答
你所描述的是Swift中结构和对象之间行为的根本区别之一。结构总是按值复制。所以不,如果你想通过引用语义复制,你将不得不使用一个对象。
答
除了@ ChrisK的回答,我没有看到从不同变量引用相同数组的许多实际用法,除非您想要实现的是将它传递给函数/方法 - 在这种情况下,您可以使用可以通过使用inout
修改参考:
var array = [1, 2, 3]
func changeArray(inout array: [Int]) {
array.append(4)
}
changeArray(&array)
了解更多关于In-Out Parameters
更新你提到在您的评论很好用的情况。这导致了我的解决方案,这是一种解决方法 - 重要的是它的工作原理。使用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]]
的可能重复的[夫特::通过引用传递数组(http://stackoverflow.com/questions/24250938/swift-pass-array-by-reference) – 2014-09-23 19:49:50
所以你不从游乐场实施例不想避免结构变异。你想拥抱结构变异! – matt 2014-09-23 19:55:54