Swift 3更好的解开可选方法

时间:2017-01-04 16:56:30

标签: swift optional optional-binding

现在我有一些代码如下:

let msg: String? = myStr.removingPercentEncoding ?? nil

print("msg \(msg!)")

我真的不喜欢在!中使用msg!因为这可能会引发异常,我相信。

如果myStr不是nil,然后在不抛出异常的情况下解包msg,那么调用myStr.removingPercentEncoding的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

正确的方法是:

if let msg = myStr.removingPercentEncoding {
    print("msg \(msg)")
}

此处msg仅在if语句中有效且仅在myStr.removingPercentEncoding不是nil的情况下有效。

如果您希望在myStr.removingPercentEncodingnil的情况下打印某些内容,那么您可以else

if let msg = myStr.removingPercentEncoding {
    print("msg \(msg)")
} else {
    print("msg has no value")
}

阅读Optional Binding一书中的The Swift Programming Language

答案 1 :(得分:2)

myStr.removingPercentEncodingnil时,nil??的右侧)被分配到msg时,此行完全无效:

let msg: String? = myStr.removingPercentEncoding ?? nil

你为什么不这样做:

let msg: String = myStr.removingPercentEncoding ?? ""

print("msg \(msg)")