在Objective-C和Swift中链接可为空的块?

时间:2019-06-17 08:58:17

标签: objective-c swift objective-c-blocks chaining swift-block

我需要写:

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

其中块是一些代码块。我看到了很多示例,但是没有人描述如何同时声明链接和可为空的块(在这种情况下,似乎nullable是必需的。)

如何解决此问题? Swift和Objective-C解决方案均适用。

1 个答案:

答案 0 :(得分:0)

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的{​​{1}}。