我正在socket.io
快速的ios应用程序中实现。
目前,在几个面板上,我正在侦听服务器并等待传入消息。我这样做是通过getChatMessage
在每个面板中调用该函数:
func getChatMessage(){
SocketIOManager.sharedInstance.getChatMessage { (messageInfo) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
//do sth depending on which panel user is
})
}
}
但是我注意到这是一个错误的方法,我需要更改它-现在我只想开始监听一次传入的消息,并且当出现任何消息时-将此消息传递给任何侦听它的面板。
所以我想通过NSNotificationCenter传递传入的消息。到目前为止,我能够传递发生了某些事情的信息,但无法传递数据本身。我这样做的原因是:
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.showSpinningWheel(_:)), name: showSpinner, object: nil)
然后我有一个函数叫做:
func showSpinningWheel(notification: NSNotification) {
}
每当我想称呼它时,我都在做:
NSNotificationCenter.defaultCenter().postNotificationName(hideSpinner, object: self)
那么如何传递对象messageInfo
并将其包含在调用的函数中呢?
雨燕2.0
传递信息使用的userInfo
是[NSObject:AnyObject]类型的可选词典?
let imageDataDict:[String: UIImage] = ["image": image]
// Post a notification
NSNotificationCenter.defaultCenter().postNotificationName(notificationName, object: nil, userInfo: imageDataDict)
// Register to receive notification in your class
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.showSpinningWheel(_:)), name: notificationName, object: nil)
// handle notification
func showSpinningWheel(notification: NSNotification) {
if let image = notification.userInfo?["image"] as? UIImage {
// do something with your image
}
}
Swift 3.0及更高版本
现在,userInfo需要[AnyHashable:Any]吗?作为参数,我们在Swift中将其作为字典文字提供
let imageDataDict:[String: UIImage] = ["image": image]
// post a notification
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "notificationName"), object: nil, userInfo: imageDataDict)
// `default` is now a property, not a method call
// Register to receive notification in your class
NotificationCenter.default.addObserver(self, selector: #selector(self.showSpinningWheel(_:)), name: NSNotification.Name(rawValue: "notificationName"), object: nil)
// handle notification
// For swift 4.0 and above put @objc attribute in front of function Definition
func showSpinningWheel(_ notification: NSNotification) {
if let image = notification.userInfo?["image"] as? UIImage {
// do something with your image
}
}
注意:
通知“名称”不再是字符串,而是类型为Notification.Name,因此,为什么要使用它NSNotification.Name(rawValue:"notificationName")
,我们可以使用自己的自定义通知扩展Notification.Name。
extension Notification.Name {
static let myNotification = Notification.Name("myNotification")
}
// and post notification like this
NotificationCenter.default.post(name: .myNotification, object: nil)
问题内容: 我试图将对象从我的应用程序委托传递到另一个类的通知接收器。 我想传递整数。现在我有: 在接收器中: 在执行通知的类中: 但是我想将对象传递给另一个类。 问题答案: 您必须使用“ userInfo”变体,并传递一个包含messageTotal整数的NSDictionary对象: 在接收端,您可以按以下方式访问userInfo字典:
问题内容: 以传统方式添加事件侦听器: 但是我想适应addEventListener的方式: 它不起作用,因为我无法将getSelection()中的任何参数作为addEventListener方法中的第二个参数传递?据我所知,我只能使用没有括号的函数名。 任何的想法? 问题答案: 无需传递任何内容。用于的函数将自动绑定到当前元素。只需在您的函数中使用: 如果要将任意数据传递给函数,请将其包装在您
问题内容: 我应该如何在jQuery Ajax请求中传递查询字符串值?我目前按照以下方式进行操作,但是我敢肯定有一种更清洁的方法,不需要我手动编码。 我已经看到了将查询字符串参数作为数组传递的示例,但是我看到的这些示例没有使用模型,而是直接使用。例如: 我更喜欢使用$ .ajax()格式,因为这是我习惯的格式(没有特别好的理由-只是个人喜好)。 编辑09/04/2013: 在我的问题结束(如“太过
我应该如何在jQuery Ajax请求中传递查询字符串值?我目前是这样做的,但我肯定有一个更干净的方法,不需要我手动编码。 我见过查询字符串参数作为数组传递的示例,但这些示例没有使用模型,而是直接使用。例如: 我更喜欢使用$.ajax()格式,因为这是我习惯的格式(没有特别好的理由--只是个人偏好)。 编辑09/04/2013: 在我的问题结束后(因为“太本地化”),我发现了一个相关的(相同的)问
当我向应用程序提供参数时,它不会运行。它没有争论。 请帮帮我。
问题内容: 在我的 app.js中, 我有以下3行。 user.js文件看起来就像普通的辅助方法。但是,它需要与数据库进行交互。 user.js 显然,我想在文件内部使用。无论如何,当我使用method 时,我可以将其传递给文件吗? 问题答案: 我认为您想做的是: 这使您可以将客户端作为模块中每个函数的参数,或作为模块作用域变量,如下所示: