我有两个功能,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
}
}
答案 0 :(得分:1)
您不仅要保存对function
的引用,还要保存data
参数。
所以你需要将它包装到闭包中:
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()
}
}