我在这里写了简单的代码
self.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Cancel, target: self, action: Selector("cancelClick"))
实际功能
func cancelClick(isAlert:String = "yes"){
self.dismissViewControllerAnimated(true, completion: { () -> Void in
if isAlert == "yes" {
Functions.displayAlert("called")
}
})
}
self.cancelClick()
- 工作但如果我没有通过论证self.cancelClick(isAlert:"no")
- Crashed 那么如果我必须在默认的参数中传递参数,我的选择器应该是什么
尝试使用Selector("cancelClick")
和Selector("cancelClick:")
,但没有运气。
答案 0 :(得分:4)
问题是参数不适合你。它始终是按钮("发件人"),这是唯一的它可以是。
换句话说,如果你想让这个函数有一个参数,那么无论如何你需要将你的选择器字符串设置为"cancelClick:"
- 冒号意味着它需要一个参数。但该参数必须是按钮:
func cancelClick(bbi:UIBarButtonItem?) {
但是,您会注意到我巧妙地将此UIBarButtonItem参数设置为Optional。为什么你认为我这样做了?因为现在你可以也直接调用它并传递nil:
self.cancelClick(nil)
因此,cancelClick:
现在可以通过点击按钮或直接通话来了解通话 - 如果bbi
不是零,则点按按钮;如果bbi
为零,我们会直接从代码中调用。偷偷摸摸,嗯?
另一个偷偷摸摸的方法是将参数设为AnyObject:
func cancelClick(sender:AnyObject) {
这样做的好处是你可以用任何类的类实例来调用它。 cancelClick
可以检查sender
的类型。如果它是UIBarButtonItem(sender is UIBarButtonItem
),那么我们通过点击按钮来调用。否则,如果在代码中调用,则可以传入一个字符串或该函数可能准备处理的任何其他内容。
答案 1 :(得分:0)
请勿使用slf4j-api-1.7.12.jar
,而只需使用冒号Selector("cancelClick:")
,以便传递参数。
正如马特所说,你必须传递的论点是"cancelClick:"
(按钮)本身。