Nowość w Swift. Mam dwa fragmenty poniżej:Selektor kontra działanie Swift 4
NotificationCenter.default.addObserver(self,
selector:#selector(ViewController.notificationReceived),
name: Notification.Name(rawValue: name), object: nil)
@objc func notificationReceived(notification:Notification){
let x = notification.userInfo!
print("\(x["name"]!)")
}
i wreszcie
let x:UITapGestureRecognizer = UITapGestureRecognizer(target: self,
action: #selector(tapped))
self.addGestureRecognizer(x)
func tapped(){
print("tapped")
self.delegate!.theViewTapped()
}
Dlaczego jest to, że dla notificationCenter
? Mam podać tag @objc
dla parametru selector
, ale nie dla parametru akcji UITapGestureRecognizer
?
Jaka jest dokładnie różnica między Selector
i Action in
Swift?
Porównaj [Jak radzić sobie z wycofaniem zapytania @objc za pomocą #selector() w Swift 4?] (Https://stackoverflow.com/q/44390378/2976878) - jak mówi OOPer, oba przykłady wymagają docelową metodą jest '@ objc'. – Hamish