ios - Swift 中的可选项,为什么这个简单的代码不打印可选项?

标签 ios swift option-type swift-playground

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 没有任何值,那么程序就会崩溃。

关于ios - Swift 中的可选项,为什么这个简单的代码不打印可选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28670633/

相关文章:

ios - SoundCloud 表示声音可以流式传输,但无法在 iOS 或 OS X 上播放

ios - 快速完成处理程序无法将类型的值转换为指定类型

swift - 我如何在聊天中显示用户最后一条消息旁边的个人资料图片

ios - 我什么时候应该在我的模型中使用可选字符串?

arrays - 如何从数组中删除特定对象?

ios - captureStillImageAsynchronouslyFromConnection 返回 nil 错误

swift - 使用自动布局在 UITableview 中异步调整 UIImage 高度

ios - 如何向 AVPlayerLooper 添加平滑的淡入/淡出过渡?

swift !不删除 Optional()

ios - iOS 中的内联 UIPickerview