2014-09-23 29 views
1

是否有可能让结构像对象一样行为。 F.e .:是否有可能避免迅速结构变异?

var arr = [1] 
let arr1 = arr 
arr.append(1) 

我想让arr1与arr相同。是唯一的选择包装到一个对象?

+0

的可能重复的[夫特::通过引用传递数组(http://stackoverflow.com/questions/24250938/swift-pass-array-by-reference) – 2014-09-23 19:49:50

+0

所以你不从游乐场实施例不想避免结构变异。你想拥抱结构变异! – matt 2014-09-23 19:55:54

回答

6

你所描述的是Swift中结构和对象之间行为的根本区别之一。结构总是按值复制。所以不,如果你想通过引用语义复制,你将不得不使用一个对象。

2

除了@ 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]] 
+1

如何拥有一个数组的数组?如果我想更改“行”数组,我必须重新分配它。 – 2014-09-23 21:02:24

+0

好点。这是少数情况下的方便之一。我认为你应该在你的问题中明确说明你是否想达到目的。 – Antonio 2014-09-23 21:09:58

+0

查看更新的答案。我认为'NSMutableArray'就是你正在寻找的东西。 – Antonio 2014-09-23 21:15:49