2017-03-01 60 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