斯威夫特4加手势:覆盖VS @objc

问题描述:

我期待手势添加到我的观点如下:斯威夫特4加手势:覆盖VS @objc

override func viewDidLoad() { 
    super.viewDidLoad() 

    < blah blah blah > 

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

然而,斯威夫特4我的编译器是给我下面的错误:

Argument of '#selector' refers to instance method 'handleTap()' that is not exposed to Objective-C 

建议添加@objc以将此实例方法公开给Objective-C。

实现此功能的其他选项(仅限代码)将覆盖touchesBegan()函数并使用它来处理分接头。

我试图做这个'斯威夫特'的方式,而不必带入Obj-C。是否有一种纯粹的Swift方式来添加此轻拍手势而不使用@objc?或者,这是添加此轻拍手势的正常和预期的方式?

+0

的可能的复制[我该如何处理与斯威夫特4 #selector()@objc推理折旧?](https://stackoverflow.com/questions/44390378/how-can-i-deal-with-objc -inference-deprecation-with-selector-in-swift-4) – LinusGeffarth

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

底层手势识别器代码是用Objective-C编写的,因此您需要使您的选择器可以从Objective-C中调用,并且这些都是@objc正在执行的操作。

您的替代技术仍在使用Objective C-API,但与它们没有选择器进行交互,因此它不太明显。

+0

好的答案;)我只补充说这个改变是由[Limiting @objc inference proposal]实现的(https://github.com/apple/swift -evolution/blob/master/proposals/0160-objc-inference.md)。 –