我使用swift 4
来构建我的UI,我创建了一个UIButton
并想要为其添加目标。
但是编制者会发出警告:No method declared with Objective-C selector 'onClick:forEvent:'
button.addTarget(self, action: Selector("onClick:forEvent:"), for: UIControlEvents.touchUpInside)
//...
func onClick(_ sender: Any, forEvent event: UIEvent) {
print("button click", sender, event);
}
当我点击警告三角形时,尝试解决此问题。
Wrap the selector name in parentheses to suppress this warning
。
它只是将选择器名称包装在括号中。
button.addTarget(self, action: Selector(("onClick:forEvent:")), for: UIControlEvents.touchUpInside)
建立成功,但是当我点击按钮时。
抛出错误
libc++abi.dylib: terminating with uncaught exception of type NSException
我知道它可以更改为#selector(ViewClass.methodName)
和@objc func methodName() {..}
方式。
但为什么Selector
无效?这是正确的swift 4
方式吗?
答案 0 :(得分:2)
您应该在函数前加@objc
,以使其对Objective-C运行时可见,例如:
@objc func onClick(_ sender: Any, forEvent event: UIEvent)