SwiftでDictionaryの値を追加、変更するのに2通りのやりかたがあります。
ひとつはsubscript、dict["key"] = "value"
もうひとつはupdateValue、dict.updateValue("value", forKey: "key")
です。
どちらを使ってもDictionaryの値を変更できますが、微妙に違いがあります。
1. 戻り値
updateValueの場合は戻り値で「変更前の値」を返します。 keyが存在しない場合はnilを返します。
例
var dict1 = ["a": "a"] print(dict1.updateValue("A", forKey: "a")) print(dict1.updateValue("b", forKey: "b"))
これを実行すると
"a" nil
となります。
2. nilをセットしたときの挙動の違い
subscriptの場合
updateValueの場合は
例
var dict1 = ["a": "a"] dict1["a"] = nil print(dict1)
これを実行すると
[:]
となり、key-valueが削除されます。
var dict1 = ["a": "a"] dict1.updateValue(nil, forKey: "a") // error: nil is not compatible with expected argument type 'String'
これはコンパイルエラーになります
var dict1: [String: String?] = ["a": "a", "b": "b"] dict1.updateValue(nil, forKey: "b") print(dict1)
これを実行すると
["a": Optional("a"), "b": nil]