我正在初步构建计算器。目前,该代码只是在用户点击计算器时将数字和 Pi 打印到计算器的标签中。
\n\n1) 车码
\n\nimport 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}\nRun Code Online (Sandbox Code Playgroud)\n\n2)用户界面
\n\ntouchDigit功能链接到所有数字按钮,如下图所示。display是performOperaton ,UILable而performOperaton是PI按钮
问题:您可能会找到该行(代码的第三行)UILabel! = nil。我认为将 a 添加nil到强制展开选项会使代码崩溃,但事实并非如此,到目前为止,代码工作正常。这是为什么?
未包装可选是与编译器的约定,即访问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 加载时被分配。