Estou implementando socket.io
em meu aplicativo ios swift.
Atualmente em vários painéis estou ouvindo o servidor e aguardando mensagens recebidas. Estou fazendo isso chamando a getChatMessage
função em cada painel:
func getChatMessage(){
SocketIOManager.sharedInstance.getChatMessage { (messageInfo) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
//do sth depending on which panel user is
})
}
}
No entanto, percebi que é uma abordagem errada e preciso mudá-la - agora quero começar a ouvir as mensagens recebidas apenas uma vez e quando chegar alguma mensagem - passe essa mensagem para qualquer painel que a ouvir.
Portanto, desejo passar a mensagem recebida pelo NSNotificationCenter. Até agora consegui passar a informação de que algo aconteceu, mas não passei os dados em si. Eu estava fazendo isso por:
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.showSpinningWheel(_:)), name: showSpinner, object: nil)
então eu tive uma função chamada:
func showSpinningWheel(notification: NSNotification) {
}
e sempre que eu queria ligar, estava fazendo:
NSNotificationCenter.defaultCenter().postNotificationName(hideSpinner, object: self)
Então, como posso passar o objeto messageInfo
e incluí-lo na função que é chamada?
fonte
NSNotificationCenter.defaultCenter().postNotificationName("hideSpinner", object: nil, userInfo: yourvalue)
yourValue
na função que é chamada nessa notificação (inshowSpinningWheel
)?.userinfo
comonotification.userinfo
Respostas:
Swift 2.0
Passe informações usando o
userInfo
que é um Dicionário opcional do tipo [NSObject: AnyObject]?Versão Swift 3.0 e superior
O userInfo agora leva [AnyHashable: Any]? como um argumento, que fornecemos como um dicionário literal em Swift
NOTA: Os “nomes” de notificação não são mais strings, mas são do tipo Notification.Name, por isso estamos usando
NSNotification.Name(rawValue:"notificationName")
e podemos estender Notification.Name com nossas próprias notificações personalizadas.fonte
Para Swift 3
Para Swift 4
fonte
Olá @sahil, atualizo sua resposta para o swift 3
Espero que seja útil. obrigado
fonte
é assim que eu o implemento.
fonte
No swift 4.2, usei o seguinte código para mostrar e ocultar o código usando NSNotification
fonte