2016-11-28 74 views
1

在Javascript中,當你這樣做:變量共享相同的數組實例 - 類似的Javascript數組

var a = [1, 2]; 

var b = a; 

b.push(3); 

console.log(a); //Print [1, 2, 3] 

A和B共享相同的數組實例。 我正在尋找一種方式,斯威夫特

實現這一

這裏是我的銀行代碼:

var array1 = [[1], [2], [3]]; 

var array2 = array1[0]; 

array2.append(0); 

print(array1); 
//print [[1], [2], [3]] 
//I want [[1, 0], [2], [3]] 

數組1 [0] &數組2是兩個不同的實例... 我想兩個變量(用不同的名字)指向一個數組的同一個實例。

+1

數組是斯威夫特值類型,你不能與他人分享同一個實例。 – Santosh

+0

哦,這很難過......也許是一種指針變量?它存在嗎? –

+3

相關:[在swift中通過視圖控制器之間的引用傳遞數組](http://stackoverflow.com/q/32049202/2976878),[是否可以通過引用而不是副本將數組分配給類屬性?]( http://stackoverflow.com/questions/25533122/is-it-possible-to-assign-an-array-to-a-class-property-by-reference-rather-than-a) – Hamish

回答

2

您必須將值類型包裝到引用類型中,即類中。

class wrapper { 
    var array = [1,2] 
} 

var a = wrapper() 

var b = a 

b.array.append(3) 

print(a.array) // [1,2,3] 

閱讀here您還可以使用的NSMutableArray

var c : NSMutableArray = [1,2] 


var d = c 

d.insert(3, at: 2) 

print(c) //"(\n 1,\n 2,\n 3\n)\n" 
+0

我不確定至於哪個更快/更好,但我認爲如果你只需要一個數組,那麼使用NSMutableArray是首選,但是如果你想要一個模型,也就是說也存儲一個數組並且需要被持久化的東西,那麼可能把它包裝到一個類中是一個更好的選擇。 – Honey

+3

封裝類型要好得多,因爲不像'NSMutableArray'(你不需要將元素連接到Obj-C),你不會扔掉元素的類型信息。您可以使包裝通用,以便存儲不同類型的數組,如[Qbyte's answer here](http://stackoverflow.com/a/32050164/2976878)中所示。 – Hamish

+0

@Hamish更快,因爲沒有橋接?好。當你說*「不要丟棄類型信息」時,你的意思是什麼?*你的意思是泛型? – Honey

相關問題