【发布时间】:2016-12-17 23:02:02
【问题描述】:
我想在有套接字连接时执行一个函数。但是当有连接时可以立即触发这些方法。没有时必须建立连接。
什么是解决这个问题的好方法?
import SocketIO
class SocketIOManager: NSObject {
static let sharedInstance = SocketIOManager()
var socket: SocketIOClient = SocketIOClient(socketURL: NSURL(string: "http://192.168.1.59:3000")! as URL)
var connectionMade = false;
override init() {
super.init()
}
func establishConnection(completionHandler: (() -> Void)!) {
if(!connectionMade){
socket.connect()
connectionMade = true;
}
completionHandler();
}
func connectToRoom(roomNumber: String){
establishConnection {
self.socket.emit("connectToRoom", roomNumber);
}
}
}
这是一个好的设置吗?是的,当连接关闭时,我必须将 bool 设置为 false :)
我问这个是因为我的代码有问题。我在应用程序委托处调用它以建立连接:
func applicationDidBecomeActive(_ application: UIApplication) {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
SocketIOManager.sharedInstance.establishConnection {
}
}
这在我的视图控制器上:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
SocketIOManager.sharedInstance.connectToRoom(self.roomNumber);
}
但服务器永远不会收到 connectToRoom 的“消息”。当我按下带有此代码的按钮时,它会起作用:
SocketIOManager.sharedInstance.connectToRoom(self.roomNumber);
所以看起来套接字连接不是在 viewdidload 处建立的。但是为什么当我按下按钮时它会起作用?因为我正在等待来自 SocketIOManger 类的连接的 connectTo Room 函数处的回调。
【问题讨论】: