Swift中UIButton点击事件为何要加上@objc
2019-06-12 本文已影响232人
代码之路
原因
一般的方法前面是不需要写@objc的,但selector对应的方法前面必须加,因为selector其实是 Objective-C runtime 的概念。在 Swift4 中,默认情况下所有的 Swift 方法在Objective-C 中都是不可见的,所以你需要在这类方法前面加上@objc关键字,将这个方法暴露给 Objective-C,才能进行使用。
更优雅的方式
算是一种取巧的方式吧。用 extension。 把需要加 @objc 的方法。放到对应的 extension 里面。在 extension 外部直接用 @objc。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
perform(#selector(test))
perform(#selector(handleClick))
}
}
@objc
extension ViewController {
func test() -> Bool {
return false
}
func handleClick() {
}
}