2014-09-23 32 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