Swift 3 种更好的解包可选的方法
Swift 3 better way to unwrap an optional
现在我有一些代码如下所示:
let msg: String? = myStr.removingPercentEncoding ?? nil
print("msg \(msg!)")
我真的不喜欢在 msg!
中使用 !
,因为我相信这可能会引发异常。
如果 myStr 不为 nil 然后在不抛出异常的情况下解包 msg,调用 myStr.removingPercentEncoding
的最佳方法是什么?
正确的方法是:
if let msg = myStr.removingPercentEncoding {
print("msg \(msg)")
}
此处,msg
仅在 if
语句内有效且仅当 myStr.removingPercentEncoding
不是 nil
.
如果 myStr.removingPercentEncoding
是 nil
,如果你想打印一些东西,那么你可以 else
:
if let msg = myStr.removingPercentEncoding {
print("msg \(msg)")
} else {
print("msg has no value")
}
阅读 Optional Binding in the The Swift Programming Language 本书。
这一行完全没用,当myStr.removingPercentEncoding
是nil
时,那么nil
(??
右边)赋值给msg
:
let msg: String? = myStr.removingPercentEncoding ?? nil
为什么不把它改成:
let msg: String = myStr.removingPercentEncoding ?? ""
print("msg \(msg)")
现在我有一些代码如下所示:
let msg: String? = myStr.removingPercentEncoding ?? nil
print("msg \(msg!)")
我真的不喜欢在 msg!
中使用 !
,因为我相信这可能会引发异常。
如果 myStr 不为 nil 然后在不抛出异常的情况下解包 msg,调用 myStr.removingPercentEncoding
的最佳方法是什么?
正确的方法是:
if let msg = myStr.removingPercentEncoding {
print("msg \(msg)")
}
此处,msg
仅在 if
语句内有效且仅当 myStr.removingPercentEncoding
不是 nil
.
如果 myStr.removingPercentEncoding
是 nil
,如果你想打印一些东西,那么你可以 else
:
if let msg = myStr.removingPercentEncoding {
print("msg \(msg)")
} else {
print("msg has no value")
}
阅读 Optional Binding in the The Swift Programming Language 本书。
这一行完全没用,当myStr.removingPercentEncoding
是nil
时,那么nil
(??
右边)赋值给msg
:
let msg: String? = myStr.removingPercentEncoding ?? nil
为什么不把它改成:
let msg: String = myStr.removingPercentEncoding ?? ""
print("msg \(msg)")