Swift可选项和if let语句

3
我正在比较以下代码片段:
var num = Int(numTextField.text!)!

为了

if let num = Int(numTextField.text!) {}

有人能解释一下为什么if left语句不需要第二个"!"吗?这与it技术有关。如果在if let块中进行赋值,是否会隐式解包Int可选项?如果是的话,有人能解释一下其中的机制吗?

提前感谢!


这就是可选绑定,它专门设计用于安全地解包可选项。如果您尝试将非可选项用作赋值的右侧,您将会得到编译器错误。 - Hamish
不需要强制解包你的可选项。只需使用 guard 来解包它。guard let text = numTextField.text, num = Int(text) else { return } - Leo Dabus
左侧语句不需要第二个 "!",因为您将可选项解包到 variable 变量中。 - AnthonyR
或者,如果您不需要为“text”创建单独的可选绑定,您也可以执行if let num = numTextField.text.flatMap({Int($0)}) {...}以消除强制解包。 - Hamish
1个回答

12
当你执行时,
if let num = Int(numTextField.text!){}

它会为您展开值并检查是否可以将文本字段的值设置为 num。 如果该值为 nil,则可以像这样处理错误。
if let num = Int(numTextField.text!){
    print("Yes the value is not nil")
}else{
    print("Couldn't assign value to num because it's nil")
}

如果你进行

var num = Int(numTextField.text!)!

如果文本字段为nil,则会出现运行时错误,您的应用程序将崩溃。


2
实际上这仍然可能会崩溃。如果你真的想确保它不会崩溃,你应该始终避免强制解包。所以你应该这样做: if let text = numTextField.text, let num = Int(text) - gebirgsbärbel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接