var shoppingList = ["item1": "bread", "item2": "milk" ]
if let oldItem = shoppingList.updateValue("honey", forKey: "item2") {
println("old value was \(oldItem)")
}
// This prints out "old value was milk"
但是,如果我这样做
var shoppingList = ["item1": "bread", "item2": "milk" ]
let oldItem = shoppingList.updateValue("honey", forKey: "item2")
println("old value was \(oldItem)")
// This would print out "old value was Optional("milk")
if oldItem != nil {
println("old value was \(oldItem)")
}
// And this prints out the same "old value was Optional("milk")
为什么会发生这种情况而不是第一个例子中的if语句?
注意:我在游乐场进行测试,版本6.1.1(6A2008a)。
答案 0 :(得分:1)
var shoppingList = ["item1": "bread", "item2": "milk" ]
if let oldItem = shoppingList.updateValue("honey", forKey: "item2") {
println("old value was \(oldItem)")
}
// This prints out "old value was milk"
因为此代码(if let
声明)会解包键“item2
”的值,并将未展开的值存储在oldItem
中。
如果您只是这样打印:
let oldItem = shoppingList.updateValue("honey", forKey: "item2")
println("old value was \(oldItem)")
会打印Optional("old value was milk")
但是如果密钥item2
没有任何值,那么程序就会崩溃。
答案 1 :(得分:1)
字典上的 updateValue 方法返回已替换的值。所以当你这样做时
if let oldItem = shoppingList.updateValue("honey", forKey: "item2")
将替换的值作为牛奶返回到oldItem。
println("old value was \(oldItem)")
oldItem返回它拥有的旧值。
注意:在字典上执行updateValue时,如果显示密钥,则会更新新的键/值对。如果未显示密钥,则将新的密钥/值对添加到字典中。如果密钥存在,则updateValue返回旧的更新值,否则返回nil。