当声明用于点击手势和通知的函数时,是否需要参数/参数?



我知道点击手势和通知是如何工作的,所以这不是问题。

我注意到的是,我已经看到有些人使用参数/参数来获得点击手势函数或通知功能:

override viewDidLoad(){
   super.viewDidLoad()

   NotificationCenter.default.addObserver(self, selector: #selector(notifyMe), name: NSNotification.Name(rawValue: notificationKey), object: nil)
   let gesture = UITapGesture(target: self, action: #selector(tapMe))
   view.addGestureRecognizer(gesture)
}

@objc func tapMe(_ sender: UITapGestureRecognizer){
   // do something
}
@objc func notifyMe(_ notification: Notification){
   // do something
}

但是,我在有没有参数/参数的情况下都使用了这些功能,它们正常工作:

@objc func tapMe(){
   // do something
}
@objc func notifyMe(){
   // do something
}

如果没有它们,则使用参数/参数的目的是什么?

目的是能够识别和区分 sender/ object,并在注意到能够从userInfo字典中获取其他信息/数据的情况下。

是的,您是对的,参数是可选的。这是因为当选择器执行选择器时,Objective-C运行时不在乎选择器是否具有正确数量的参数或其他内容。它只是将一堆对象传递给选择器。如果选择器具有匹配参数,则参数将具有传递对象的相应值。如果没有,对象将被扔掉。这也是为什么您可以使用特定UIControl类型,AnyObject或根本没有参数的参数声明IBAction s。

执行选择器时,与之执行的其他对象显然并不总是没有用的。如果您有多个手势识别符或UIButton S连接到一种方法。然后,知道谁是sender是有用的。对于通知,该参数通常包含有关通知的一些信息,这些信息可能很有用。

最新更新