J'implémente socket.io
dans mon application iOS rapide.
Actuellement sur plusieurs panneaux, j'écoute le serveur et j'attends les messages entrants. Je le fais en appelant la getChatMessage
fonction dans chaque panneau:
func getChatMessage(){
SocketIOManager.sharedInstance.getChatMessage { (messageInfo) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
//do sth depending on which panel user is
})
}
}
Cependant, j'ai remarqué que c'est une mauvaise approche et que je dois la changer - maintenant je veux commencer à écouter les messages entrants une seule fois et quand un message arrive - transmettez ce message à n'importe quel panneau qui l'écoute.
Je veux donc faire passer le message entrant via NSNotificationCenter. Jusqu'à présent, j'ai pu transmettre les informations indiquant que quelque chose s'était passé, mais pas les données elles-mêmes. Je faisais cela en:
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.showSpinningWheel(_:)), name: showSpinner, object: nil)
puis j'ai eu une fonction appelée:
func showSpinningWheel(notification: NSNotification) {
}
et chaque fois que je voulais l'appeler, je faisais:
NSNotificationCenter.defaultCenter().postNotificationName(hideSpinner, object: self)
Alors, comment puis-je passer l'objet messageInfo
et l'inclure dans la fonction qui est appelée?
la source
NSNotificationCenter.defaultCenter().postNotificationName("hideSpinner", object: nil, userInfo: yourvalue)
yourValue
dans la fonction qui est appelée sur cette notification (inshowSpinningWheel
)?.userinfo
commenotification.userinfo
Réponses:
Swift 2.0
Transmettre les informations en utilisant
userInfo
quel est un dictionnaire facultatif de type [NSObject: AnyObject]?Version Swift 3.0 et supérieure
Le userInfo prend maintenant [AnyHashable: Any]? comme argument, que nous fournissons comme littéral de dictionnaire dans Swift
REMARQUE: les «noms» de notification ne sont plus des chaînes, mais sont de type Notification.Name, c'est pourquoi nous utilisons
NSNotification.Name(rawValue:"notificationName")
et pouvons étendre Notification.Name avec nos propres notifications personnalisées.la source
Pour Swift 3
Pour Swift 4
la source
Bonjour @sahil, je mets à jour votre réponse pour swift 3
J'espère que c'est utile. Merci
la source
c'est ainsi que je le mets en œuvre.
la source
Dans swift 4.2, j'ai utilisé le code suivant pour afficher et masquer le code à l'aide de NSNotification
la source