斯威夫特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?或者,这是添加此轻拍手势的正常和预期的方式?
答
使用@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)。 –
的可能的复制[我该如何处理与斯威夫特4 #selector()@objc推理折旧?](https://stackoverflow.com/questions/44390378/how-can-i-deal-with-objc -inference-deprecation-with-selector-in-swift-4) – LinusGeffarth