2016-11-28 32 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

相关问题