Saya sedang menerapkan socket.io
di aplikasi ios cepat saya.
Saat ini di beberapa panel saya mendengarkan server dan menunggu pesan masuk. Saya melakukannya dengan memanggil getChatMessage
fungsi di setiap 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
})
}
}
Namun saya perhatikan itu adalah pendekatan yang salah dan saya perlu mengubahnya - sekarang saya ingin mulai mendengarkan pesan masuk hanya sekali dan ketika ada pesan datang - meneruskan pesan ini ke panel mana pun yang mendengarkannya.
Jadi saya ingin meneruskan pesan masuk melalui NSNotificationCenter. Sejauh ini saya dapat menyampaikan informasi bahwa sesuatu telah terjadi, tetapi tidak dapat meneruskan data itu sendiri. Saya melakukannya dengan:
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.showSpinningWheel(_:)), name: showSpinner, object: nil)
lalu saya memiliki fungsi yang disebut:
func showSpinningWheel(notification: NSNotification) {
}
dan kapan pun saya ingin menyebutnya, saya melakukan:
NSNotificationCenter.defaultCenter().postNotificationName(hideSpinner, object: self)
Jadi bagaimana saya bisa melewatkan objek messageInfo
dan memasukkannya ke dalam fungsi yang dipanggil?
sumber
NSNotificationCenter.defaultCenter().postNotificationName("hideSpinner", object: nil, userInfo: yourvalue)
yourValue
dalam fungsi yang dipanggil pada notifikasi itu (dalamshowSpinningWheel
)?.userinfo
sepertinotification.userinfo
Jawaban:
Swift 2.0
Lewati info
userInfo
yang merupakan Dictionary opsional dari tipe [NSObject: AnyObject]?Versi Swift 3.0 ke atas
UserInfo sekarang menggunakan [AnyHashable: Any]? sebagai argumen, yang kami sediakan sebagai kamus literal di Swift
CATATAN: “Nama” notifikasi tidak lagi berupa string, tetapi bertipe Notification.Name, oleh karena itu kami menggunakan
NSNotification.Name(rawValue:"notificationName")
dan kami dapat memperluas Notification.Name dengan notifikasi kustom kami sendiri.sumber
Untuk Swift 3
Untuk Swift 4
sumber
Halo @sahil Saya memperbarui jawaban Anda untuk cepat 3
Semoga bermanfaat. Terima kasih
sumber
inilah cara saya menerapkannya.
sumber
Dalam 4.2 cepat saya menggunakan kode berikut untuk menampilkan dan menyembunyikan kode menggunakan NSNotification
sumber