Ich implementiere socket.io
in meiner schnellen iOS-App.
Derzeit höre ich auf mehreren Panels den Server und warte auf eingehende Nachrichten. Ich rufe dazu die getChatMessage
Funktion in jedem Panel auf:
func getChatMessage(){
SocketIOManager.sharedInstance.getChatMessage { (messageInfo) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
//do sth depending on which panel user is
})
}
}
Ich habe jedoch festgestellt, dass dies ein falscher Ansatz ist, und ich muss ihn ändern. Jetzt möchte ich nur noch einmal auf eingehende Nachrichten warten und diese Nachricht an jedes Panel weiterleiten, das sie abhört.
Daher möchte ich die eingehende Nachricht über das NSNotificationCenter weiterleiten. Bisher konnte ich die Information weitergeben, dass etwas passiert ist, aber nicht die Daten selbst weitergeben. Ich habe das gemacht von:
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.showSpinningWheel(_:)), name: showSpinner, object: nil)
dann hatte ich eine Funktion namens:
func showSpinningWheel(notification: NSNotification) {
}
und jedes Mal, wenn ich es nennen wollte, tat ich:
NSNotificationCenter.defaultCenter().postNotificationName(hideSpinner, object: self)
Wie kann ich das Objekt übergeben messageInfo
und in die aufgerufene Funktion aufnehmen?
quelle
NSNotificationCenter.defaultCenter().postNotificationName("hideSpinner", object: nil, userInfo: yourvalue)
yourValue
in der Funktion abrufen, die bei dieser Benachrichtigung (inshowSpinningWheel
) aufgerufen wird ?.userinfo
likenotification.userinfo
Antworten:
Swift 2.0
userInfo
Übergeben Sie Informationen mit einem optionalen Wörterbuch vom Typ [NSObject: AnyObject]?Swift 3.0 Version und höher
Die userInfo nimmt jetzt [AnyHashable: Any]? als Argument, das wir in Swift als Wörterbuchliteral bereitstellen
HINWEIS: Benachrichtigungsnamen sind keine Zeichenfolgen mehr, sondern vom Typ Notification.Name. Daher verwenden wir
NSNotification.Name(rawValue:"notificationName")
Notification.Name und können Notification.Name um unsere eigenen benutzerdefinierten Benachrichtigungen erweitern.quelle
Für Swift 3
Für Swift 4
quelle
Hallo @sahil, ich aktualisiere deine Antwort für Swift 3
Hoffe es ist hilfreich. Vielen Dank
quelle
So implementiere ich es.
quelle
In Swift 4.2 habe ich folgenden Code verwendet, um Code mithilfe von NSNotification anzuzeigen und auszublenden
quelle