首页 > 解决方案 > 在 Objective-C 和 Swift 中链接可空块?

问题描述

我需要有可能写:

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

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

如何解决这个问题?Swift 和 Objective-C 解决方案都适用。

标签: objective-cswiftobjective-c-blockschainingswift-block

解决方案


Swift中,您可以使用closures.

即创建variables类型3 (()->())-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()

在上面的代码中,我使用DispatchGroupsynchronous所有的blocks.


推荐阅读