'#selector'的争论并不是指' @ objc'方法,属性或初始化程序

时间:2017-06-12 07:34:52

标签: swift swift3 selector

任何人都可以告诉我为什么这段代码会给出错误信息"' #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。

1 个答案:

答案 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属性添加到操作方法中。