Selector-ul este in Objective-C și SWIFT un fel aparte de referință a unei metode.
Pentru a înțelege mai bine ce-i cu acest selector, urmărim codul:
class ViewController : UIViewController {
@IBOutlet var b : UIButton!
func viewDidLoad() {
super.viewDidLoad()
self.b.addTarget( // prepare to crash!
self, action: "buttonPressed", for: .touchUpInside)
}
func buttonPressed(_ sender: Any) {
// ...
}
}
self.b este un buton în interfață care atunci când va fi apăsat se va apela metoda addTarget(action:for:)
Aceasta la rândul ei va încerca să apeleze buttonPressed. Însă buttonPressed nu este metodă în SWIFT, numele corect fiind buttonPressed:, ceea ce va duce la crash atunci când se va apăsa pe buton.
Pentru a remedia acest aspect se folosește #selector:
class ViewController : UIViewController {
@IBOutlet var button : UIButton!
func viewDidLoad() {
super.viewDidLoad()
self.b.addTarget(
self, action: #selector(buttonPressed), for: .touchUpInside)
}
func buttonPressed(_ sender: Any) {
// ...
}
}