为什么在“ UITapGestureRecognizer”中使用@objc?

时间:2019-01-29 12:24:56

标签: uitapgesturerecognizer swift4.2

我将UITapGestureRecognizer添加到了UIView中。但是我不明白为什么我必须使用@objc才能使用UITapGestureRecognizer

尤其是Selector?#selector之间的区别太令人困惑了。

official document of the Apple developer中没有看到使用@objc的解释。

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        let viw = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
        viw.center = self.view.center
        viw.backgroundColor = UIColor.black
        self.view.addSubview(viw)

        let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))
        viw.addGestureRecognizer(tap)
    }

    @objc func handleTap(sender: UITapGestureRecognizer) {
        if sender.state == .ended {
            print(1)
        }
    }
}

我认为这是一种旧方法。如果有将UITapGestureRecognizer添加到UIView的最新方法,我想知道。

1 个答案:

答案 0 :(得分:1)

为什么使用@objc?

如果您使用的基本上是用Objective-C编写的任何类选择器,则需要在该函数之前添加@objc,以便UITapGestureRecognizer类可以通过适当的事件返回。

如果在手势处理函数编译器未添加@objc之前将引发错误,如下所述:

  

“#selector”的参数引用实例方法“ handleTap()”,   没有暴露于Objective-C

它清楚地表明您还没有暴露Objective-C的句柄。

Apple正式链接语言互操作性

https://developer.apple.com/documentation/swift#2984801

也请查看此链接以获取有关

的更多信息

Use runtime Obj C features in Swift

希望您可以得到上面解释的答案表格!