如何仅当其他异步方法在 Swift 中完成工作时才异步调用方法?

How can I call asynchronously a method only when other async method finishes working in Swift?

我正在为 swift 实现 socket.io 库。

有一个与连接服务器相关的方法,如下所示:

func connectToServerWithNickname(nickname: String) {
        socket.emit("connectUser", nickname)
}

socket.emit调用:

private func _emit(data: [AnyObject], ack: Int? = nil) {
    dispatch_async(emitQueue) {
        guard self.status == .Connected else {
            self.handleEvent("error", data: ["Tried emitting when not connected"], isInternalMessage: true)
            return
        }

        let packet = SocketPacket.packetFromEmit(data, id: ack ?? -1, nsp: self.nsp, ack: false)
        let str = packet.packetString

        DefaultSocketLogger.Logger.log("Emitting: %@", type: self.logType, args: str)

        self.engine?.send(str, withData: packet.binary)
    }
}

如您所见,它全部打包在 dispatch_async 中。一旦此方法完成并且我的应用程序连接到服务器,我想 post 一个 NSNotification,例如:

NSNotificationCenter.defaultCenter().postNotificationName(setConnectionStatus, object: self)

所以我的问题是 - 我应该如何修改我的 connectToServerWithNickname 方法,以便它在一切正常时调用我的 nsnotificationcenter

在您声明您正在使用 socket.IO

之后

当您在连接之前创建套接字实例时,您将拥有

var socket: SocketIOClient = SocketIOClient(socketURL: NSURL(string: "http://192.168.1.XXX:3000")!)

然后在这之后

    socket.on("connect") { (data, ack) -> Void in
         // This will be fired once your socket connects.
    }

编辑:

对于个人发射,您将保留一个指向套接字的指针并使用

     let json = ["things_i_need_to_send" : stuff]

    socket.emitWithAck(Place_i_need_to_send_to, json)(timeoutAfter: 3) { data in
       //This is called on completion
    }

所以使用上面的例子。

    socket.emitWithAck(connectUser, nickname)(timeoutAfter: 3) { data in
       //This is called on completion
    }