Swift:串口异步执行+闭包数组+转义

时间:2018-01-02 18:24:01

标签: swift asynchronous closures

我有一些异步功能,我希望能够串联运行以避免"回调地狱"并简化了我编写以下帮助程序结构的内容:

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;。我应该将这些关闭标记为以其他方式逃脱吗?

索引变量的生命周期是什么,我可以在完成的闭包中使用它而没有任何问题吗?

0 个答案:

没有答案