Swift 4:Timer Crashing – 无法识别的选择器发送到实例

我正在尝试调用Timer的一个实例,并为每一秒钟打印“已经过了一秒钟”。 我正在关注Udemy的完整iOs 11和Swift开发者课程。 教练正是这样做,他的代码正常工作,但是我的崩溃了。

这是代码:

var timer: Timer! = Timer() @IBAction func cameraPressed(_ sender: Any) { timer.invalidate() } func processTimer() { print("A second has passed") } override func viewDidLoad() { super.viewDidLoad() timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: Selector("processTimer"), userInfo: nil, repeats: true) 

它应该在运行应用程序时启动计时器,然后在我按下cameraPressed按钮时停止它。 但是,它出错了:

无法识别的选择器发送到实例…

libc ++ abi.dylib:以NSException类型的未捕获exception终止

我是Swift的新手,其他类似的StackOverflow问题并没有解决我的问题。 我试过改变了“计时器!” 可选“定时器?” 并将“Selector(”processTimer“)”更改为“#selector(processTimer)”,我仍然没有让它工作。

尝试这个。

 var timer: Timer! = Timer() @IBAction func cameraPressed(_ sender: Any) { timer.invalidate() } @objc func processTimer() { print("A second has passed") } override func viewDidLoad() { super.viewDidLoad() timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(processTimer), userInfo: nil, repeats: true) } 

在Swift 4+中,你需要为选择器方法提供@objc表达式 。 在此之前它曾经是隐含的obj-C。 也许教师video正在运行旧版Swift。

回调函数processTimer未正确声明:

 @objc func processTimer() { //your code here } 

您需要在函数之前添加@objc关键字才能在Timer回调中调用。 另外,一般来说我认为最好使用#selector关键字。