如何在#selector添加默认参数值

问题描述:

我有一个函数:如何在#selector添加默认参数值

func handleChange(isShown:Bool){ 
     if isShown { 
      // do something A 
     }else{ 
      // do something B 
     } 
    } 

如果我想要一个UISlider到违约增加与被示上述行动,和我将在另一个函数中调用方法handleChange(isShown:Bool)true。 错误的代码如下:

slider.addTarget(self, action: #selector(handleValue(isShown:false)), for: .valueChanged) 

而且我知道正确的代码需要:

slider.addTarget(self, action: #selector(handleValue(isShown:)), for: .valueChanged) 

我只是想知道我怎么可以把“被示”在迅速假?感谢您的回复。

+4

你不能。要么没有参数,要么参数必须是'UISlider'实例。带参数的语法必须是'handleChange(_ sender:UISlider)' – vadian

+0

您不能。你可以传递的是'sender',在这种情况下是'UISlider'。你的“正确的代码”不是。 – dfd

+0

看到我编辑的第一条评论。 – vadian

一个解决方案是使用与selector函数分开的辅助函数。选择器函数可以调用辅助函数,它可以具有任意数量的参数。

添加目标:

slider.addTarget(self, action: #selector(handleChange(_ sender: UISlider)), for: .valueChanged) 

目标函数:

func handleChange(sender: UISlider) { 
    // logic based on the action or slider 
    doSomething(isShown: true) 
} 

辅助功能:

func doSomething(isShown: Bool) { 
    // make your changes using the parameters here 
} 
+1

感谢您的回复 – Ringo