Цепные блоки Nullable в Objective-C и в Swift? - PullRequest
0 голосов
/ 17 июня 2019

Мне нужно иметь возможность написать:

//if someCase1
block1(block2(block3()))
//if someCase2
block1(block3())
//if someCase3
block2(block3())

где блоки - это несколько блоков кода. Я видел много примеров, но никто не описывает, как объявлять блоки цепочки и блоки NULL одновременно (кажется, nullable требуется для этого случая).

Как решить эту проблему? Возможны решения как Swift, так и Objective-C.

1 Ответ

0 голосов
/ 17 июня 2019

В Swift , вы можете достичь этого, используя closures.

Создать 3 variables типа (()->()), а именно - block1, block2, block3

  1. Звоните block2 внутри block1
  2. Звоните block3 внутри block2

Пример:

let dispatchGroup = DispatchGroup()
dispatchGroup.notify(queue: .main) {
    print("All blocks executed")
}

dispatchGroup.enter()
let block3 = {
    print("block3 called")
    dispatchGroup.leave()
}

dispatchGroup.enter()
let block2 = {
    print("block2 called")
    block3()
    dispatchGroup.leave()
}

dispatchGroup.enter()
let block1 = {
    print("block1 called")
    block2()
    dispatchGroup.leave()
}

block1()

В приведенном выше коде я использовал DispatchGroup для synchronous выполнения всех blocks.

...