Swift - 如何在带有参数的方法上调用Selector()?

14

我正在学习Swift,需要在点击时调用我的方法,这是代码:

var gestureRecognizer = UITapGestureRecognizer()
myView.addGestureRecognizer(gestureRecognizer)
gestureRecognizer.addTarget(self, action: Selector(dismiss(nil)))

这会返回一个错误 - 无法找到接受提供的参数的init重载

我还尝试了像Selector("dismiss:nil")Selector("dismiss(nil)"),但没有成功。

这里是我正在调用的方法:

func dismiss(completion: (() -> Void)!) {
    self.dismissViewControllerAnimated(true, completion: completion)
}

3
你提到的答案并没有回答这个问题,该问题询问如何向函数传递参数。例如 dismiss() 和 dismiss(theParameter :String)。请注意,这两个函数有所不同。 - Scooter
2个回答

18

只需将方法名作为字符串使用:

gestureRecognizer.addTarget(self, action: "dismiss:")

编辑:在 Swift 3.0 中,您将需要使用以下语法:

gestureRecognizer.addTarget(self, action: #selector(dismiss(_:)))

8
你不需要在选择器中传递参数,只需使用冒号表示即可。此外,你完全不必使用Selector类型。如果你传递一个字符串字面量,它会自动转换为选择器。
gestureRecognizer.addTarget(self, action:"dismiss:")

20
那么你把参数传递到哪里呢? - Michael Yaworski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接