Estoy implementando socket.io
en mi aplicación ios rápida.
Actualmente en varios paneles estoy escuchando el servidor y espero mensajes entrantes. Lo hago llamando a la getChatMessage
función en cada panel:
func getChatMessage(){
SocketIOManager.sharedInstance.getChatMessage { (messageInfo) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
//do sth depending on which panel user is
})
}
}
Sin embargo, noté que es un enfoque incorrecto y necesito cambiarlo; ahora quiero comenzar a escuchar los mensajes entrantes solo una vez y cuando llegue cualquier mensaje, pase este mensaje a cualquier panel que lo escuche.
Así que quiero pasar el mensaje entrante a través del NSNotificationCenter. Hasta ahora pude pasar la información de que sucedió algo, pero no pasar los datos en sí. Estaba haciendo eso por:
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.showSpinningWheel(_:)), name: showSpinner, object: nil)
entonces tuve una función llamada:
func showSpinningWheel(notification: NSNotification) {
}
y cada vez que quería llamarlo estaba haciendo:
NSNotificationCenter.defaultCenter().postNotificationName(hideSpinner, object: self)
Entonces, ¿cómo puedo pasar el objeto messageInfo
e incluirlo en la función que se llama?
fuente
NSNotificationCenter.defaultCenter().postNotificationName("hideSpinner", object: nil, userInfo: yourvalue)
yourValue
en la función que se llama en esa notificación (enshowSpinningWheel
)?.userinfo
likenotification.userinfo
Respuestas:
Swift 2.0
¿Pasar información usando
userInfo
cuál es un Diccionario opcional de tipo [NSObject: AnyObject]?Versión Swift 3.0 y superior
UserInfo ahora toma [AnyHashable: Any]? como argumento, que proporcionamos como literal de diccionario en Swift
NOTA: Los “nombres” de notificación ya no son cadenas, sino de tipo Notification.Name, por lo que estamos usando
NSNotification.Name(rawValue:"notificationName")
Notification.Name y podemos extenderlo con nuestras propias notificaciones personalizadas.fuente
Para Swift 3
Para Swift 4
fuente
Hola @sahil actualizo tu respuesta para swift 3
Espero que sea de ayuda. Gracias
fuente
así es como lo implemento.
fuente
En swift 4.2 utilicé el siguiente código para mostrar y ocultar código usando NSNotification
fuente