线程1:Xcode

时间:2017-09-18 08:01:27

标签: ios swift xcode

我有这段代码:

import UIKit

类ViewController:UIViewController {

@IBOutlet weak var myLabel: UILabel!


@IBAction func myFirstButtonPressed(_ sender: UIButton) {
    let getButtonText : String = sender.title(for: .normal)!

    myLabel.text = "Clicked \(String(describing: getButtonText))"
}


@IBAction func mySecondButtonPressed(_ sender: UIButton) {
    let getSecondTitle :String = sender.title(for: .normal)!

    myLabel.text = "Clicked \(String (describing: getSecondTitle))"
}}

正如你所看到的,我创建了两个按钮和一个标签,我在它们上面使用了完全相同的说明, 但是当我在Xcode上运行模拟器时,我尝试点击第二个按钮,标签完全没有任何问题。

但是当我点击第一个按钮时,会发生错误。 这是完全相同的代码,但为什么第一个按钮给我一个错误而第二个按钮不是?

我刚刚开始学习IOS,当我“继续执行程序”时,错误发生在Thread:SIGBRT之后。

我见过很多其他人在堆栈溢出时发布此问题,但我找不到问题的解决方案。

希望你们能帮帮我。

2 个答案:

答案 0 :(得分:0)

您不应强制解包来自sender.title的值。相反,你应该做类似的事情:

if let text = sender.title() { 
  print(text)
}

这可能会导致文本无法显示(因为您的设置中可能出现其他错误),但至少可以防止硬盘崩溃。

答案 1 :(得分:0)

这行代码可能会返回nil值。

let getButtonText : String = sender.title(for: .normal)!

所以改变强制包装到可选

let getButtonText : String? = sender.title(for: .normal)?

同时检查按钮连接的参考和动作。