Ios 在Swift中编程异步委托方法

Ios 在Swift中编程异步委托方法,ios,asynchronous,swift,callback,serial-port,Ios,Asynchronous,Swift,Callback,Serial Port,我有一个应用程序,它通过UART连接与设备通信。 当接收到数据时,调用didReceiveData()委托。 这里我需要确定谁调用了数据并触发(另一个委托的)相应的方法。 我计划创建一个connections字典,该字典由建立连接时创建的connectionID字符串以及回调的选择器(可能并不总是提供)设置关键字 。。。 打电话时: let sel = Selector(anotherDelegate?.didReceiveLocation("")) self.sendData(

我有一个应用程序,它通过UART连接与设备通信。 当接收到数据时,调用didReceiveData()委托。 这里我需要确定谁调用了数据并触发(另一个委托的)相应的方法。 我计划创建一个connections字典,该字典由建立连接时创建的connectionID字符串以及回调的选择器(可能并不总是提供)设置关键字

。。。 打电话时:

    let sel = Selector(anotherDelegate?.didReceiveLocation(""))
    self.sendData("sendMe",Selector(anotherDelegate?.didReceiveLocation))
我在执行此操作时遇到一些错误,首先,类型NSData不符合协议StringLiteralConverable。NSData引用didReceiveLocation的参数。 第二个在self.sendData行上:无法使用类型为(StringLiteralConverable,Selector)的参数列表调用“init”


这种方法有意义吗?如何将另一个委托的回调方法存储在字典或其他结构中,以便从didReceiveData委托方法访问它?

选择器非常客观。。。为什么不干脆用闭包呢

要声明以字符串作为键的字典和以字符串作为参数且不返回任何内容的函数,请执行以下操作:

connections = [String:String->()]()
若要声明一个函数,该函数接受一个带有单个字符串参数且没有返回值的闭包,请使用以下命令:

func sendData(dataString:String, callback:String->()) {
    ...
    connections[cid] = callback
    ...
}
若要稍后调用该闭包,可以将其作为子例程调用(在本例中,在执行字典查找之后,如果尚未分配,则使用可选链接):

然后调用上面声明的sendData例程,并使用几个缩写语法之一传入闭包:

    self.sendData("sendMe") { response in
        ...
    }
请注意,这实际上是以下内容的简写:

    self.sendData("sendMe", callback:{ response:String in
        ...
    })
注意,Objective-C调用程序也可以使用这种机制,因为闭包或多或少直接映射到Objective-C块


有关闭包及其定义和调用的更多信息,我强烈建议从iTunes书店下载免费的Swift图书。

这听起来像是我在寻找的,但我对闭包非常陌生,对闭包的实现有点困惑。sendMe()函数是否与sendData分开?如果我的回调方法是anotherDelegate?.foundLocation(字符串),我调用sendData之类的发送数据(“findLocation”,“anotherDelegate?.foundLocation(字符串)”)?
    self.sendData("sendMe") { response in
        ...
    }
    self.sendData("sendMe", callback:{ response:String in
        ...
    })