如何在没有发件人的情况下将目标添加到UIButton

时间:2017-12-05 02:05:11

标签: ios swift uibutton selector sender

我有一个功能...

func MyFunc (_ sender: AnyObject) { 
    let n = sender.tag! //do stuff with 'n'
}

我在创建NewButton时连接...

NewButton.addTarget(self, action: #selector(Main.MyFunc(_:)), for: .touchUpInside)

我想在没有发件人的情况下在我的代码的其他区域中致电MyFunc。是否可以在不使用发件人的情况下将.addTarget转换为Button?

比如......

NewButton.addTarget(self, action: #selector(Main.MyFunc(n: 5)), for: .touchUpInside)

和...

func MyFunc (n: Int) {
    //do stuff with 'n'
}

我知道一个解决方案就是像......这样的路由功能。

func router (_ sender: AnyObject) {
    MyFunc(n: sender.tag!)
}

但我想知道是否有更优雅的方式。

1 个答案:

答案 0 :(得分:2)

由于函数采用类型为AnyObject的发送方,因此您可以使用任何对象作为函数的参数。然后,您只需要有条件地将其转换为您想要的类型。

let button = UIButton()
button.addTarget(self, action: #selector(touched(_:)), for: .touchUpInside)

touched(1 as AnyObject) // Works

@objc func touched(_ sender: AnyObject) {
    if let casted = sender as? Int {
        // Do something with casted as an Int
    } else if let casted = sender as? UIButton {
        // do something with casted.tag
    }
}