2017-03-01 56 views
1

近日笔者从Objective-C的移动斯威夫特,以及我在与下面的示例中的一个问题:无法更新数组中字典中的值?

var test: [[String: AnyObject]] = [["value": true]] 

var aaa: [String: AnyObject] = test[0] 
print(aaa["value"]) // prints Optional(1) 
aaa["value"] = false 
print(aaa["value"]) // prints Optional(0) 

var bbb: [String: AnyObject] = test[0] 
print(bbb["value"]) // prints Optional(1) again??? 

怎么来的变化也不会存储在test数组中?

谢谢。

+2

@Dhivya两个引用不相关的问题直接更改。 – vadian

回答

4

Swift Dictionary是值类型不是引用类型,因此您需要在进行更改后将其设置为具有数组的字典。

var test: [[String: AnyObject]] = [["value": true]] 

var aaa: [String: AnyObject] = test[0] 
print(aaa["value"]) // prints Optional(1) 
aaa["value"] = false 
print(aaa["value"]) // prints Optional(0) 

//Replace old dictionary with new one 
test[0] = aaa  

var bbb: [String: AnyObject] = test[0] 
print(bbb["value"]) // prints Optional(0) 

或者你可以试试简单地这样说:

test[0]["value"] = false 
+0

但是,这只与字典? 我应该期待与阵列以及? '[[true],[true]]'? – thedp

+1

布尔数组也是值类型,所以也不可能,但是您可以简单地设置'array [0] [1] = false'不需要先提取值并设置它,然后替换数组中的对象。 –

+0

我明白了。非常感谢。 – thedp

1

从主阵列

test[0]["value"] = false