将 nil 分配给强制展开选项不会使代码崩溃,这是为什么呢?

SLN*_*SLN 0 xcode ios swift

我正在初步构建计算器。目前,该代码只是在用户点击计算器时将数字和 Pi 打印到计算器的标签中。

\n\n

1) 车码

\n\n
import UIKit\n\nclass ViewController: UIViewController {\n\n    @IBOutlet weak var display: UILabel! = nil //Look Here "(\n\n    var userIsInTheMiddleOfTypeing = false\n\n    @IBAction func touchDigit(_ sender: UIButton){\n        let digit = sender.currentTitle!\n        if userIsInTheMiddleOfTypeing {\n            let textCurrentlyInDisplay = display.text!\n            display.text = textCurrentlyInDisplay + digit\n        } else {\n            display.text = digit\n        }\n\n        userIsInTheMiddleOfTypeing = true\n    }\n\n    @IBAction func performOperation(_ sender: UIButton) {\n        userIsInTheMiddleOfTypeing = false\n        if let methematicalSymbol = sender.currentTitle {\n            if methematicalSymbol == "\xcf\x80" {\n                display.text = String(M_PI) // M_PI\n            }\n        }\n    }      \n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

2)用户界面

\n\n

touchDigit功能链接到所有数字按钮如下图所示。display是performOperaton UILableperformOperaton是PI按钮

\n\n

在此输入图像描述

\n\n

问题:您可能会找到该行(代码的第三行)UILabel! = nil。我认为将 a 添加nil到强制展开选项会使代码崩溃,但事实并非如此,到目前为止,代码工作正常。这是为什么?

\n

Gri*_*mxn 5

未包装可选是与编译器的约定,即访问nil时该值不会是。考虑以下游乐场代码。

var x: Int! = nil // It's declared as an unwrapped optional *var*
x = 5 // So assigning to it is OK
var y: Int = x // you can access its value, if it's not nil
x = nil // even assigning nil is OK
//y = x // CRASH. *Accessing* it when nil causes an error
Run Code Online (Sandbox Code Playgroud)

添加= nil你的声明实际上是虚假的 - 如果你删除它,变量仍然会被初始化为nil,并且,正如 @MartinR 在评论中指出的那样,你的出口将在 Xib 加载时被分配。