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

感謝您的幫助! :) –

相關問題