当定义一个 UIButton 组件时候,为其绑定点击事件
override func viewDidLoad() {
super.viewDidLoad()
let btn = UIButton(type: .system)
btn.frame = CGRect(x: 0, y: 0, width: 275, height: 40)
self.view.addSubview(btn)
btn.setTitle("Go", for: UIControlState.normal)
btn.addTarget(self, action: #selector(handleClick), for: UIControlEvents.touchUpInside)
}
声明这个 handleClick 函数时候这样写
func handleClick(){
// do something
}
这样就会报错
我知道在函数前面加一个 @objc 就行了,但是好丑,我想知道有没有别的处理方法,可以不用在声明函数时候写 @objc
求路过的大神帮帮忙
一般的方法前面是不需要写
@objc
的,但selector
对应的方法前面必须加,因为selector
其实是 Objective-C runtime 的概念。在 Swift4 中,默认情况下所有的 Swift 方法在Objective-C 中都是不可见的,所以你需要在这类方法前面加上@objc
关键字,将这个方法暴露给 Objective-C,才能进行使用。其实这是
@objc
的其中一种作用,其他作用你可以再查下资料。