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