任何人都可以告诉我为什么这段代码会给出错误信息"' #selector'并不是指' @ objc'方法,属性或初始化程序"?
timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector:#selector(updateTimer(until: 3)), userInfo: nil, repeats: true)
这里的功能是:
func updateTimer(until endTime: Int) {
counter -= 1
timeLabel.text = String(counter)
if counter == endTime {
step += 1
}
}
我的尝试:
1.在函数前添加@objc。
答案 0 :(得分:5)
目标/操作方法的选择器必须在没有参数或传递受影响对象的参数的情况下声明。
如果Timer
使用userInfo
参数传递数据。
timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector:#selector(updateTimer(_:)), userInfo: 3, repeats: true)
func updateTimer(_ timer: Timer) {
let endTime = timer.userInfo as! Int
counter -= 1
timeLabel.text = String(counter)
if counter == endTime {
step += 1
}
}
如果封闭类没有继承NSObject
格式,则必须将@objc
属性添加到操作方法中。