2015-10-19 81 views
0

我需要改变未知深度的嵌套字典。Swift - 替换嵌套结构中的值

我意识到,在迅速结构是值类型的时候,其实我需要一个引用类型(“NSMutable”)

但我注意到,如果我访问使用点嵌套结构(。)语法我能够直接更新值,而不需要重新分配给原始“父母”。

例如在嵌套数组的情况:

var l1 = ["a0","b0"] 
var l2 = ["a1","b1"] 
var list = [l1,l2] 
print(list) 
>>[["a0", "b0"], ["a1", "b1"]] 


// I can mutate the nested structs by using dot(.) syntax 
// mutate the zero indexed nested array: 
list[0].insert("x0", atIndex: 0) 
print(list) 
>> [["x0", "a0", "b0"], ["a1", "b1"]] 

// try to mutate after assignment - Not able to 
var l1Ref = list[0] 
print(l1Ref) 
>> ["x0", "a0", "b0"] 
l1Ref.removeFirst() 
print(l1Ref) 
>> ["a0", "b0"] 
print(list) 
// still the same as was before 
>> [["x0", "a0", "b0"], ["a1", "b1"]] 

我怎么能发生变异的嵌套结构迭代,而无需使用点语法?

回答

0

数组是Swift中的结构,当你将一个子数组赋值给一个变量时,你得到了子数组的副本。 要到子阵列的参考定义数组类型NSMutableArrays的数组:

var array: [NSMutableArray] = [["a", "b", "c"]] 
var subArray = array[0] 
subArray.removeObjectAtIndex(1) 

print(array, subArray) 
>> [(a, c)] [(a, c)] 

可以在斯威夫特here

阅读更多关于阵列