我有一些异步功能,我希望能够串联运行以避免"回调地狱"并简化了我编写以下帮助程序结构的内容:
typealias AsyncCallback = (Bool) -> Void
typealias AsyncFunction = (AsyncCallback) -> Void
public struct AsyncHelpers {
public static func series(_ functions: [AsyncFunction], _ callback: @escaping AsyncCallback) {
var index = 0
var completed: AsyncCallback? = nil
completed = { success in
if success == false { callback(false); return }
index += 1
if index < functions.count {
functions[index](completed!)
return
}
callback(true)
}
functions[index](completed!)
}
}
AsyncHelpers.series([
{ callback in
// do async stuff
callback(true)
}, { callback in
// then do async stuff
callback(true)
}
]) { callback in
// when all completed
}
我可以为完成处理程序设置@escaping属性,但是当我尝试将此属性应用于[AsyncFunction]时,compilator会因此错误而失败:&#34; @escaping属性仅适用于函数类型&#34;。我应该将这些关闭标记为以其他方式逃脱吗?
索引变量的生命周期是什么,我可以在完成的闭包中使用它而没有任何问题吗?