Swift 中的 Optionals,为什么这个简单的代码不打印 optional?
Optionals in Swift, why this simple code doesn't print optional?
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 语句?
注意:我正在 playground 版本 6.1.1 (6A2008a) 中对此进行测试。
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
没有任何值,那么程序就会崩溃。
字典 returns 上的方法 updateValue 值已被替换。所以当你做
if let oldItem = shoppingList.updateValue("honey", forKey: "item2")
替换值milk返回到oldItem。
println("old value was \(oldItem)")
oldItem returns 它拥有的旧值。
注意:当您对字典执行 updateValue 时,如果提供了键,则会更新新的 key/value 对。如果未提供密钥,则将新的 key/value 对添加到字典中。如果键存在,updateValue returns 旧的更新值,如果不存在,returns nil。
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 语句?
注意:我正在 playground 版本 6.1.1 (6A2008a) 中对此进行测试。
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
没有任何值,那么程序就会崩溃。
字典 returns 上的方法 updateValue 值已被替换。所以当你做
if let oldItem = shoppingList.updateValue("honey", forKey: "item2")
替换值milk返回到oldItem。
println("old value was \(oldItem)")
oldItem returns 它拥有的旧值。
注意:当您对字典执行 updateValue 时,如果提供了键,则会更新新的 key/value 对。如果未提供密钥,则将新的 key/value 对添加到字典中。如果键存在,updateValue returns 旧的更新值,如果不存在,returns nil。