繁体   English   中英

Swift-替换嵌套结构中的值

[英]Swift - Replace a value in a nested struct

我需要变异深度未知的嵌套字典。

我意识到当我实际上需要引用类型(“ NSMutable”)时,swift中的结构就是值类型

但是我注意到,如果使用dot(。)语法访问嵌套结构,则可以直接更新值,而无需重新分配给原始的“父级”。

例如,对于嵌套数组:

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"]]

如何在不使用点语法的情况下迭代更改嵌套结构?

数组是Swift中的结构,当您将子数组分配给变量时,会得到该子数组的副本。 要获得对子数组的引用,请将数组的类型定义为NSMutableArrays的数组:

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

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

您可以在此处阅读有关Swift中数组的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM