我正在構建計算器的初始方式。目前,代碼無所作爲,只是在用戶點擊它時將數字和Pi打印到計算器的標籤中。將一個零分配給強制解包可選不會使代碼崩潰,爲什麼?
1)澈代碼
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var display: UILabel! = nil //Look Here "(
var userIsInTheMiddleOfTypeing = false
@IBAction func touchDigit(_ sender: UIButton){
let digit = sender.currentTitle!
if userIsInTheMiddleOfTypeing {
let textCurrentlyInDisplay = display.text!
display.text = textCurrentlyInDisplay + digit
} else {
display.text = digit
}
userIsInTheMiddleOfTypeing = true
}
@IBAction func performOperation(_ sender: UIButton) {
userIsInTheMiddleOfTypeing = false
if let methematicalSymbol = sender.currentTitle {
if methematicalSymbol == "π" {
display.text = String(M_PI) // M_PI
}
}
}
}
2)UI
的touchDigit功能被鏈接到所有的數字按鈕,如圖中下圖。所述顯示是UILable
而performOperaton是PI按鈕
問題:您可能找到的行(該代碼的第三行)UILabel! = nil
。我認爲增加一個nil
到一個強制解包可選將崩潰的代碼,但它不,到目前爲止,代碼工作正常。這是爲什麼?
你爲什麼認爲它會崩潰?所有可選項(包括IUO)都被隱式初始化爲零,所以'var display:UILabel! = nil'和'var display:UILabel!'。 *解包*是什麼可以崩潰... –
@MartinR好了,現在我明白了一點吧 – SLN
另外 - 假設插座連接正確 - 當視圖控制器從Storyboard實例化時,變量將被設置。所以當'touchDigit'被調用時它不再是'nil'。 –