我觉得好像我不能正确理解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语句。我确定我错过了一些简单的事情。
感谢。
答案 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
}
}