Swift2 在以后的Swift 2.0中存储回调函数
我有两个函数,Swift2 在以后的Swift 2.0中存储回调函数,swift2,Swift2,我有两个函数,func1和func2。当有人呼叫时,应检查插座是否连接。如果套接字未连接,则应将该函数附加到处理程序数组,并在连接套接字时调用该函数 func func1(data: NSData) { if(!socket.isConnected()) { // how to do here ↓ handlers.append(func1) startConnectSocket() return; }
func1
和func2
。当有人呼叫时,应检查插座是否连接。如果套接字未连接,则应将该函数附加到处理程序数组,并在连接套接字时调用该函数
func func1(data: NSData) {
if(!socket.isConnected()) {
// how to do here ↓
handlers.append(func1)
startConnectSocket()
return;
}
socket.writeData(data, withTimeout: 0, tag: 0)
}
func func2(data1:NSData , data2:NSData) {
if(!socket.isConnected()){
// how to do here ↓
handlers.append(funky)
startConnectSocket()
return;
}
socket.writeData(data1 + data2, withTimeout: 0, tag: 0)
}
连接套接字后,调用存储在处理程序中的所有函数
func onSocket(sock: AsyncSocket!, didConnectToHost host: String!, port: UInt16) {
// how to do here ↓
for function in handlers {
// call function
}
}
您不仅要保存对
函数的引用
,还要保存数据
参数。
因此,您需要将其包装到闭包中:
var handlers: [() -> ()] = []
func func1(data: NSData) {
if(!socket.isConnected()) {
handlers.append({ func1(data) })
startConnectSocket()
return;
}
socket.writeData(data, withTimeout: 0, tag: 0)
}
func func2(data1: NSData, data2: NSData) {
if(!socket.isConnected()){
handlers.append({ func2(data1, data2) })
startConnectSocket()
return;
}
socket.writeData(data1 + data2, withTimeout: 0, tag: 0)
}
func onSocket(sock: AsyncSocket!, didConnectToHost host: String!, port: UInt16) {
for function in handlers {
function()
}
}
VaR处理程序= [(-)->()]()这一行显示了通过更改为var处理程序而固定的错误:[(-]->())][]有更好的方法吗?另一种考虑这一点的方法是使用依赖关系的NSR作业,它有效地实现了“承诺”设计。创建一个连接到套接字的操作,另一个用于执行func1(取决于第一个操作),另一个用于执行func2(可能取决于func1或仅取决于套接字操作)。对于异步、依赖的操作,它通常是一个很好的体系结构。wwdc在这方面有一个很好的演讲。