我试图运行此代码但我继续收到此错误:
致命错误:在展开Optional值时意外发现nil
我不明白这意味着什么或为什么我得到它.任何提示?
import UIKit
class ViewController: UIViewController {
var lastNumber: String = ""
@IBOutlet var answerField: UILabel
@IBOutlet var operaterLabel: UILabel
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func buttonTapped(theButton: UIButton) {
if answerField.text == "0"
{
answerField.text = theButton.titleLabel.text
}
else
{
answerField.text = answerField.text + theButton.titleLabel.text
}
}
@IBAction func plusTapped(theButton: UIButton) {
// error is talking about the next line
if operaterLabel.text == ""
{
operaterLabel.text = "+"
lastNumber = answerField.text
answerField.text = "0"
}
else
{
enterTapped(nil)
operaterLabel.text = "+"
}
}
@IBAction func minusTapped(theButton: UIButton) {
if operaterLabel.text == ""
{
operaterLabel.text = "-"
lastNumber = answerField.text
answerField.text = "0"
}
else
{
enterTapped(nil)
operaterLabel.text = "-"
}
}
@IBAction func clearTapped(AnyObject) {
answerField.text = "0"
operaterLabel.text = ""
lastNumber = ""
}
@IBAction func enterTapped(AnyObject?) {
var num1 = lastNumber.toInt()
var num2 = answerField.text.toInt()
if !num1 || !num2
{
showError()
return
}
var answer = 0
if operaterLabel.text == "-"
{
var answer = num1! - num2!
}
else if operaterLabel.text == "+"
{
var answer = num1! + num2!
}
else
{
showError()
return
}
answerField.text = "\(answer)"
}
func showError()
{
println("Ther was an error")
}
}
Run Code Online (Sandbox Code Playgroud)
jmd*_*uke 16
错误是指当可选值设置为nil时您正在访问可选值的参数(例如,访问answerField.text时间answerField为nil),可能是您的两个中的一个UILabels.
如果该行operaterLabel.text == ""抛出异常,那么你operaterLabel就是零.验证是否已将其成功连接到Interface Builder文件中的标签.
有时,您在呈现视图控制器之前启动视图控制器的问题如下:
let myViewController = MyViewController()
Run Code Online (Sandbox Code Playgroud)
将其替换为
let myViewController = self.storyboard?.instantiateViewController(withIdentifier: "storyboardID") as! MyViewController
Run Code Online (Sandbox Code Playgroud)
在我的例子中,我试图访问我创建的函数中的标签,该函数在变量集之后使用.
var something: String {
didSet {
updateUI()
}
}
func updateUI() {
label.text = "Hello"
}
Run Code Online (Sandbox Code Playgroud)
我通过以下方式解决了
var something: String
override func viewDidLoad() {
label.text = "hello"
}
Run Code Online (Sandbox Code Playgroud)
我的理论是在创建视图和标签之前访问了我的函数updateUI.
| 归档时间: |
|
| 查看次数: |
56706 次 |
| 最近记录: |