Ios Swift socket.io.emit()不';t火

Ios Swift socket.io.emit()不';t火,ios,swift,sockets,Ios,Swift,Sockets,我是sockets新手,我遇到了以下问题,我使用library将我的应用程序连接到我的nodejs服务器。 我想知道为什么以以下方式调用socket.emit()不起作用: override func viewDidLoad() { var socket: SocketIOClient = SocketIOClient(socketURL: NSURL(string: "myhosturl")!) socket.emit("ping","some data"); soc

我是sockets新手,我遇到了以下问题,我使用library将我的应用程序连接到我的nodejs服务器。 我想知道为什么以以下方式调用socket.emit()不起作用:

override func viewDidLoad() {
    var socket: SocketIOClient = SocketIOClient(socketURL: NSURL(string: "myhosturl")!)

    socket.emit("ping","some data");
    socket.connect();
}
滑动socket.emit和socket.connect函数都不起作用,但如果我通过单击按钮触发socket.emit函数,它会起作用:

override func viewDidLoad() {
   var socket: SocketIOClient = SocketIOClient(socketURL: NSURL(string: "myhosturl")!)
   socket.connect();
}

@IBAction func sendMessage(sender: AnyObject) {
   socket.emit("ping","some data");
}

我想我这里遗漏了一些东西,如果有人能向我解释一下,那就太好了。

在调用emit之前,套接字需要连接。您可能应该等到有连接后再发射。试试这个:

override func viewDidLoad() {
    let socket = SocketIOClient(socketURL: NSURL(string: "myhosturl")!)
    socket.on("connect") { _, _ in
        print("socket connected")
        socket.emit("ping", "data")
    }
    socket.on("ping") { _, _ in
        print("ping received")
    }
    socket.connect()
}

我对这个库或您的实现不太了解,但要求套接字在其连接之前发出似乎不起作用,这就是为什么它在第二个示例中可以正常工作,但在第一个示例中却不能正常工作的原因。