在 Objective-C 和 Swift 中链接可为空的块?
Chaining nullable blocks in Objective-C and in Swift?
我需要有机会写:
//if someCase1
block1(block2(block3()))
//if someCase2
block1(block3())
//if someCase3
block2(block3())
其中块是一些代码块。我看到了很多例子,但没有人描述如何同时声明链接和可空块(这种情况似乎需要 nullable
)。
如何解决这个问题? Swift和Objective-C两种方案都适用。
在Swift中,您可以使用closures
来实现。
创建 3 个 variables
类型 (()->())
即 - block1, block2, block3
- 在
block1
内调用block2
- 在
block2
内调用block3
示例:
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
。
我需要有机会写:
//if someCase1
block1(block2(block3()))
//if someCase2
block1(block3())
//if someCase3
block2(block3())
其中块是一些代码块。我看到了很多例子,但没有人描述如何同时声明链接和可空块(这种情况似乎需要 nullable
)。
如何解决这个问题? Swift和Objective-C两种方案都适用。
在Swift中,您可以使用closures
来实现。
创建 3 个 variables
类型 (()->())
即 - block1, block2, block3
- 在
block1
内调用 - 在
block2
内调用
block2
block3
示例:
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
。