类中的Swift 3方法不使用#selector语法

时间:2017-02-21 18:34:21

标签: swift

我觉得好像我不能正确理解Swift #selector。我正在尝试将按钮连接到另一个类的方法。

按下时我有一个类打印按钮:

class printThings {
    @IBAction func printMe(_ sender: UIButton){
        print("Button Pushed.")
    }
}

然后是ViewController:

class ViewController : UIViewController {
    override func ViewDidLoad(){
         super.viewDidLoad()
    //button setup here
    let printMe = printThings()
    button.addTarget(printMe, action: #selector(printMe.printMe(_:)), for: .touchUpInside)
    //add button to subview
    }
}

这永远不会触发类中的print语句。我确定我错过了一些简单的事情。

感谢。

1 个答案:

答案 0 :(得分:0)

问题是printMe是一个临时的本地变量:

let printMe = printThings() // local variable
button.addTarget(printMe, action: #selector(printMe.printMe(_:)), for: .touchUpInside)
// ... and then viewDidLoad ends, and `printMe` vanishes

所以当你按下按钮时,printMe已经消失了;没有人发送按钮消息。

如果您希望这项工作正常,则需要printMe坚持:

class ViewController : UIViewController {
    let printMe = printThings() // now it's a _property_ and will persist
    override func viewDidLoad(){
        super.viewDidLoad()
        //button setup here
        button.addTarget(self.printMe, action: #selector(self.printMe.printMe(_:)), for: .touchUpInside)
        //add button to subview
    }
}