Swift中UIButton点击事件为何要加上@objc

原因

一般的方法前面是不需要写@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()  {


    }

}

你可能感兴趣的:(Swift中UIButton点击事件为何要加上@objc)