Swift 4 添加手势:override vs @objc
Swift 4 add gesture: override vs @objc
我希望按以下方式向我的视图添加手势:
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
是正常的预期方式。
底层手势识别器代码是用 Objective-C 编写的,因此您需要使您的选择器可从 Objective-C 调用,这就是 @objc
所做的全部。
您的替代技术仍在使用 Objective C-API,但在没有选择器的情况下与它们交互,因此它不太明显。
我希望按以下方式向我的视图添加手势:
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
是正常的预期方式。
底层手势识别器代码是用 Objective-C 编写的,因此您需要使您的选择器可从 Objective-C 调用,这就是 @objc
所做的全部。
您的替代技术仍在使用 Objective C-API,但在没有选择器的情况下与它们交互,因此它不太明显。