如果连接到视图控制器,选择器将不起作用 swift

Selector won't work if concatenated to view controller swift

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

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

感谢您的帮助

通过这样做:

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))