簡體   English   中英

是否將作為參數傳遞的閉包迅速分配給參數名稱?

[英]Is a closure that is passed in as a parameter assigned to the parameter name in swift?

此代碼來自博客。

是我們之所以可以調用completion()原因,是因為() -> ()傳遞的閉包實際上已分配給參數完成,因此調用完成將執行閉包?

func thisNeedsToFinishBeforeWeCanDoTheNextStep(completion: () -> ()) {
    print("The quick brown fox")
    completion()
}

func thisFunctionNeedsToExecuteSecond() {
   print("jumped over the lazy dog")
}

如果是這樣的話,請重新調用下面的函數:我不太了解下面的代碼如何轉換為thisFunctionNeedsToExecuteSecond()之前被調用並完成的第一個函數? 我的意思是如何為()->()在導致completion()之前執行thisFunctionNeedsToExecuteSecond()被調用-這是很難以書面形式解釋這一點。

thisNeedsToFinishBeforeWeCanDoTheNextStep { () -> () in
    thisFunctionNeedsToExecuteSecond()
}

如果創建的函數以閉包作為其輸入參數之一,則在通過inputParameterName()調用閉包后立即執行該閉包。 輸入參數名稱后面的括號標記函數調用,而閉包沒有輸入參數,因為在您的情況下其類型為Void->Void

在第二個示例中

thisNeedsToFinishBeforeWeCanDoTheNextStep { () -> () in
    thisFunctionNeedsToExecuteSecond()
}

您會看到尾隨的關閉。 如果函數的最后一個輸入參數是閉包,則可以將函數調用轉換為尾隨閉包語法,在此您可以省略閉包的名稱(在您的情況下為完成), {}之間的代碼將執行一次閉包被稱為。

所以上面的代碼相當於

thisNeedsToFinishBeforeWeCanDoTheNextStep(completion: { () -> () in
    thisFunctionNeedsToExecuteSecond()
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM