Swift 4 添加手势:重写 vs @objc

7
我想在我的视图中添加手势,具体如下:
    override func viewDidLoad() {
    super.viewDidLoad()

    < blah blah blah >

    // Add tap gesture
    let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap))
    myView.addGestureRecognizer(tap)
}

然而,在Swift 4中,我的编译器会给我以下错误:
Argument of '#selector' refers to instance method 'handleTap()' that is not exposed to Objective-C

建议使用@objc来将这个实例方法暴露给Objective-C。
另一种实现方式(仅通过代码)是重写`touchesBegan()`函数并使用它来处理点击事件。
我正在尝试以“Swift”的方式完成这个操作,而不必引入Obj-C。有没有一种纯Swift的方式来添加这个轻拍手势而不使用@objc?或者使用@objc是添加这个轻拍手势的正常和预期方式吗?

可能是如何在Swift 4中处理@objc推断停用与#selector()?的重复问题。 - LinusGeffarth
1个回答

21

在这里使用@objc是正常和预期的方式。

底层手势识别器代码是用Objective-C编写的,因此您需要使您的选择器可从Objective-C调用,这就是@objc所做的全部工作。

您的替代技术仍在使用Objective C-API,但是没有选择器与它们交互,所以它只是不太显眼。


1
好的回答 ;) 我只想补充一下,这个变化是由Swift 4中的限制@objc推断提案实现的。 - Paulo Mattos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接