1

我知道挖掘手势和通知是如何工作的,所以这不是问题。当为触摸手势和通知声明函数时是否需要参数/参数?

我发现什么是我见过一些人使用参数/参数为敲击手势功能或通知功能:

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 
} 

什么用的参数/参数的目的,如果他们没有他们的工作?

回答

1

的目的是要能够识别和区分sender /的object并在与商品通知的情况下能够得到从userInfo辞典的附加信息/数据。

+0

ahhhhhhh,这实际上是有道理的,因为1次我使用userInfo字典时没有函数params,函数也没有运行。我无法弄清楚问题所在。现在这回答了这个问题。基本上只要userInfo字典没有被使用就没有问题。感谢您的帮助:) –

1

是的,你是对的,参数是可选的。这是因为在执行选择器时,objective-C运行时不关心选择器是否具有正确数量的参数或其他参数。它只是将一堆对象传递给选择器。如果选择器具有匹配的参数,那么这些参数将具有传递的对象的对应值。如果没有,物体就会被扔掉。这也是为什么您可以用UIControl类型的参数,AnyObject或根本没有参数来声明IBAction

执行选择器时,执行的附加对象显然不总是无用的。如果您有多个手势识别器或连接到单一方法的UIButton。那么知道谁是sender是有用的。对于通知,参数通常包含有关通知的一些信息,这可能很有用。

+0

感谢您的帮助! :) –

相关问题