這是我寫的第一個真正的應用程序,我不明白爲什麼我在解開可選項時得到這個「無」錯誤。如何調試「解開可選值時用nil致命錯誤」?
在我發佈代碼之前,這裏有一個簡單的費用計算器的概念。
我有兩個文本框(expenseLabel和guestLabel)。在App開始時,兩者都應該是空的。這是第一個問題。如果用戶不小心按下計算按鈕,我得到了以下錯誤:
unexpectedly found nil while unwrapping an Optional value
(它的第一行代碼標誌着我內** ** ......樓下)。
只要用戶輸入數字或應用程序開始時標籤不爲空(例如,我在故事板中輸入數字),這種情況不會發生,但由於某種奇怪的原因,我得到了相同的零當我更新resultLabel.text時,第二行到最後一行出現錯誤(再次在** ... **中標記)。 Xcode中標記該行具有以下額外的信息:
Thread 1: EXC_BAD_INSTRUCTION (code=EXE_I386_INVOP, subcode=0x0)
下面的代碼:
class ViewController: UIViewController {
@IBOutlet weak var expenseLabel: UITextField!
@IBOutlet weak var guestLabel: UITextField!
@IBOutlet weak var resultLabel: UILabel!
@IBAction func splitButton(_ sender: Any) {
let expense = expenseLabel.text
let guests = guestLabel.text
**var result = Double(expense!)!/Double(guests!)!**
result = round(result * 100)/100
**resultLabel.text = String(result)**
self.view.endEditing(true)
}
...
這其實沒有太大的代碼,但我不明白爲什麼我得到這個錯誤。我甚至嘗試了以下和其他一切之前推出的兩個變量費用和嘉賓:
expense = Double(expenseLabel.text!) ?? 0.0
guests = Double(guestLabel.text!) ?? 0.0
我認爲這將有助於消除零纏誤差,但這並沒有正常工作。
我現在覺得很無奈,因爲這不是很多代碼,而且出於某種原因,我沒有看到沒有工作。
我給別人學習斯威夫特的建議是,不要強行拆開包裝(又名使用'!'一個變量名之後),直到你適應了語言之後。強制解開一個值是一個非常明顯的跡象,表明你正在黑客攻擊並且沒有正確執行。改用'if let'或'guard'來提取該值。 – AdamPro13