xcode 9.0.1 / swift 4,没有使用Objective-C选择器声明的方法&on; 39:onClick:forEvent:'

时间:2017-10-19 11:39:39

标签: swift swift4

我使用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方式吗?

1 个答案:

答案 0 :(得分:2)

您应该在函数前加@objc,以使其对Objective-C运行时可见,例如:

@objc func onClick(_ sender: Any, forEvent event: UIEvent)