如果连接到查看控制器swift,则Selector将无法工作

时间:2018-01-20 11:58:11

标签: swift string function selector

我尝试创建一个setupTap函数,它将一个字符串作为参数,该字符串应该是一个函数名。当在选择器中我尝试调用函数(函数的视图控制器与函数字符串名称连接)时,它将无法工作。这就是我的尝试:

func setupTap(functionName: String) {
    let tap = UITapGestureRecognizer(target: self, action: MainScreenViewController().perform(NSSelectorFromString(functionName)))
    settingLabel.isUserInteractionEnabled = true
    settingLabel.addGestureRecognizer(tap)
}

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

通过这样做:

MainScreenViewController().perform(NSSelectorFromString(functionName))

您没有传递选择器,您正在立即执行选择器。您应该让手势识别器执行选择器。

事实上,swift有这种创建选择器的很酷的语法:

#selector(someFunc)

它不使用任何字符串文字,因此有一个编译时检查拼写错误!

您的setupTap功能应该是这样的:

func setupTap(selector: Selector) {
    let tap = UITapGestureRecognizer(target: self, action: selector)
    settingLabel.isUserInteractionEnabled = true
    settingLabel.addGestureRecognizer(tap)
}

这样称呼:

setupTap(selector: #selector(someFunc))