У меня есть задача синхронно вызывать функции с определенным порядком относительно друг друга.
Я понял свою функцию, но по какой-то причине, когда я ее проверил, я обнаружил аномалию.Допустим, если вы сделаете список вызовов, чтобы решить, какие права, и когда вы прекратите обрабатывать первый запрос в течение примерно 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)
})
}
}
}
}