我不知道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