当为触摸手势和通知声明函数时是否需要参数/参数?
问题描述:
我知道挖掘手势和通知是如何工作的,所以这不是问题。当为触摸手势和通知声明函数时是否需要参数/参数?
我发现什么是我见过一些人使用参数/参数为敲击手势功能或通知功能:
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
。
执行选择器时,执行的附加对象显然不总是无用的。如果您有多个手势识别器或连接到单一方法的UIButton
。那么知道谁是sender
是有用的。对于通知,参数通常包含有关通知的一些信息,这可能很有用。
+0
感谢您的帮助! :) –
ahhhhhhh,这实际上是有道理的,因为1次我使用userInfo字典时没有函数params,函数也没有运行。我无法弄清楚问题所在。现在这回答了这个问题。基本上只要userInfo字典没有被使用就没有问题。感谢您的帮助:) –