我构建一个socket方法,服务器端将JSON数组传递给客户端。
之后,我想传递数据以供其他功能使用。
但Swift中的socket方法限制我这样做,因为它是一个void函数
没有什么可以从闭包{}中逃脱,似乎我只能在套接字方法中进行操作
是否有任何解决方法可以操作套接字方法,以便从该范围中获取数据?
答案 0 :(得分:1)
我不是特别了解socket.io但是如果它是异步操作的经典情况,你可以将socket.io调用包装在一个新的完成处理程序中,例如:
// I suppose the data is of type NSData.
func readDataFromSocketIO(completion: (data: NSData) -> ()) {
socket.on("connect") { data, ack in
// ...
completion(data: data)
}
}
你用一个尾随的闭包来称呼它:
readDataFromSocketIO() { data in
// use `data` here
}
如果要填充属性:
var dataFromSIO: NSData? {
didSet {
print("We got new data!")
}
}
func populate() {
readDataFromSocketIO() { data in
self.dataFromSIO = data
}
}
当然这些只是一些简单的例子,有很多方法可以做到这一点,你必须让它适应你自己的类和方法。
另外,请注意我不是socket.io用户,我没有在Xcode中测试我的代码示例,但如果我对此问题的诊断是正确的,那么它们应该是正确的。