1

Je sais comment fonctionnent les gestes et les notifications, alors ce n'est pas la question.Lors de la déclaration d'une fonction pour les gestes de robinet et les notifications sont des paramètres/arguments nécessaires?

Ce que je remarque est que j'ai vu certaines personnes utilisent un paramètre/argument en faveur d'une fonction prise de geste ou d'une fonction de notification:

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 
} 

Cependant, je l'ai utilisé les fonctions à la fois avec et sans paramètre/arguments et ils fonctionnent très bien:

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

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

Quel est le but d'utiliser les paramètres/arguments si elles fonctionnent sans eux?

Répondre

1

Le but est d'être en mesure d'identifier et de distinguer les sender/la object et en cas de pour pouvoir Notifications par obtenir des informations/données supplémentaires du dictionnaire userInfo.

+0

ahhhhhhh, ça a du sens car 1 fois j'utilisais userInfo dict sans les params de fonction et la fonction ne fonctionnait pas. Je ne pouvais pas comprendre quel était le problème. Maintenant, cela répond à la question. Fondamentalement, tant que userInfo dict n'est pas utilisé, tout va bien. Merci pour votre aide :) –

1

Oui, vous avez raison, les paramètres sont facultatifs. En effet, lorsqu'un sélecteur est exécuté, l'exécution de l'objectif C ne se soucie pas du fait que le sélecteur possède le nombre d'arguments correct ou autre. Il passe juste un tas d'objets au sélecteur. Si le sélecteur a des paramètres correspondants, alors les paramètres auront les valeurs correspondantes des objets passés. Si ce n'est pas le cas, les objets seront simplement jetés. C'est aussi pourquoi vous pouvez déclarer IBAction s avec un paramètre d'un type spécifique UIControl, AnyObject, ou aucun paramètre du tout.

Lorsque le sélecteur est exécuté, les objets supplémentaires avec lesquels il est exécuté ne sont évidemment pas toujours inutiles. Si vous avez plusieurs identificateurs de gestes ou UIButton s connectés à une seule méthode. Ensuite, il est utile de savoir qui est le sender. Pour les notifications, le paramètre contient généralement des informations sur la notification, ce qui peut être utile.

+0

merci pour l'aide! :) –