Существуют ли в языке swift механизмы для каскадных вызовов функций через замыкания в одной очереди? - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть задача синхронно вызывать функции с определенным порядком относительно друг друга.

Я понял свою функцию, но по какой-то причине, когда я ее проверил, я обнаружил аномалию.Допустим, если вы сделаете список вызовов, чтобы решить, какие права, и когда вы прекратите обрабатывать первый запрос в течение примерно 1 минуты, остальные разрешения будут проскальзывать через

class RunFuncs {
    typealias TypeFuncCall<T> = ((_ completed: @escaping (T) -> Void) -> Void)
    static func cascad<T>(dispatchQueue queue: DispatchQueue,
                          callFuncs funcs: [TypeFuncCall<T>], 
                          indexFuncRun index: Int = 0,
                          completedAll: @escaping (([T]) -> Void)) {
        queue.async {
            guard (funcs.count > index) else {
                completedAll([T]())
                return
            }
            let callOne = funcs[index]
            let indexNext = (index + 1)
            callOne() { [completedAll, funcs, indexNext] (resultOne) in
                RunFuncs.cascad(dispatchQueue: queue,
                                callFuncs: funcs,
                                indexFuncRun: indexNext,
                                completedAll: { (resultOther) in
                    var resultAll = resultOther
                    resultAll.insert(resultOne, at: 0)
                    completedAll(resultAll)
                })
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...