Refactor Swift func, содержащий замыкания, которые не принимают аргументов, но захватывают переменные в окружающей области видимости? - PullRequest
0 голосов
/ 25 октября 2018

Описание : у меня есть функция, в которой мне нужно выполнить блок A, выполнить блок B, затем, когда оба будут выполнены, будет выполнен блок C.Я использую DispatchGroup() для этого.Но как dispatchGroup.leave() в блоке A, так и в блоке B находятся внутри замыканий completeHandler, которые не принимают аргументов, но захватывают dispatchGroup.То же самое для dispatchGroup.notify(...), блок кода execute, который является блоком C, нуждается в переменных из окружающей области, но блок не принимает аргументов.

Вопрос : блок A,B, C все внутри одного гигантского функционала, я хочу реорганизовать его в более мелкие, в такой ситуации как я могу это сделать?

Упрощенный код

private func copy(// bla bla bla)
{
    let dispatchGroup = DispatchGroup()
    // code, make variables that will be needed in block A, B, C

    dispatchGroup.enter()
    _ = item.dragItem.itemProvider.loadObject(ofClass: UIImage.self) { (provider, error) in
        // block A
        dispatchGroup.leave()
    }

    dispatchGroup.enter()
    _ = item.dragItem.itemProvider.loadObject(ofClass: URL.self) { (provider, error) in
        // block B
        dispatchGroup.leave()
    }

    dispatchGroup.notify(queue: .main) {
        // block C
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...