我不知道SnapKit,但是有一种技术可以用来在一堆异步块的最后一个完成之后执行代码。
诀窍是创建一个类来保存你的一段代码,并让每个块保存对它的引用。在这个类的deinit代码中,你执行你的代码。
实施例:
class CompletionBlock
{
var completionCode:()->()
init?(_ execute:()->())
{ completionCode = execute }
func deferred() {}
deinit
{ completionCode() }
}
调用带运行框中所示的功能之前,分配一个变量与CompletionBlock的实例,并在每个块添加到它的延迟()函数的调用。然后设置为零变量(或让它走出去的范围从调用函数)
// ...
var completion = CompletionBlock({ print("finished") })
doThis(completion: {
// ... whatever stuff you need to do
completion.deferred()
})
doThat(completion: {
// ... whatever stuff you need to do
completion.deferred()
})
completion = nil
// ....
完成变量将由两个块被捕获这样就会有一个对它的引用(保持其活跃),直到两个块都超出了范围。完成变量然后将超出范围本身并且它的deinit函数将被调用,在那时执行你的完成块。
这可能会也可能不会帮助您的具体情况,但我想我把它扔进去,以防万一。
这是一个很棒的主意!然而,不幸的是这个问题不起作用。我试过了,我想模糊的视图在回调出现的时候仍然是0宽度和高度,我认为这里还有别的事情要做。 – teradyl