7
votes

Syntaxe "Sélecteur" Swift 2.2

J'essaie de réparer mon nsnotificationCenter et que ce qui ne fonctionne pas

le message: xxx

la ligne: < / strong> xxx


0 commentaires

5 Réponses :


3
votes

Oui, dans SWIFT 2.2 Les littéraux de chaîne pour les sélecteurs sont obsolètes et là ce nouvel opérateur #selector que vous devez utiliser.

Reportez-vous à cette proposition de #Selector avec de bons exemples ici:

https://github.com/ Apple / Swift-Evolution / Blob / Master / Propositions / 0022-Objc-Selectors.md


0 commentaires

-2
votes

Ajouter @OBJC à la méthode de votre sélecteur:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "YOUR_SELECTOR_METHOD:", name: "your notification name", object: nil)

@objc func YOUR_SELECTOR_METHOD(notification: NSNotification) {
//your code
}


1 commentaires

C'est une mauvaise façon de faire les choses. Ce n'est pas parce que vous pouvez le faire, cela ne signifie pas que vous devriez. La manière surse d'erreur est d'utiliser #selector



8
votes

Le code que vous avez collé n'a aucun sens:

NSNotificationCenter.defaultCenter().addObserver(self, #selector(goBack), name: "your notification name", object: nil)


2 commentaires

Ceci est également incorrect. Vous ajoutez un observateur, auto , mais en passant dans une fonction de classe ou statique goback . Pour obtenir une référence à une fonction d'instance, comme addsubview sur uIView , vous devez faire let View = uIView () Laisser la fonctionVariable = View.addsubview (_:)


Et qu'en est-il du paramètre NSnotification avec le sélecteur? Est-ce toujours (_ :)?



4
votes

Vous devez regarder ceci: https : //github.com/apple/swift-evolution/blob/master/proposals/0022-Objc-Selectors.md

Le #selector code> proposition a été effectué en conjonction avec un autre Proposition, spécifiant les fonctions Swift par leurs étiquettes d'argumentation. Donc, si j'ai une structure: p> xxx pré>

Je ferais référence à cette fonction comme: p> xxx pré>

N'oubliez pas ici que je me réfère ici. La fonction elle-même, ne pas l'appeler. p>

vous utiliseriez cela avec #selector: p> xxx pré>

fonction sans argument: p>

#selector(self.myOtherFunction(_:))


0 commentaires

16
votes

La réponse de @ eendje est incorrecte par son premier commentaire.

Je pense que c'est une meilleure réponse. p> xxx pré>

Si certaines actions ont la cible, il devrait être présenté comme #selector (cible.method) code> ou #selector (cible.method (_:)) code> p>

voici un autre exemple p>

UIGestureRecognizer(target: target action:#selector(target.handleGesture(_:))


0 commentaires