簡體   English   中英

swift中不同類型的閉包語法 - 哪一個是正確的?

[英]Different types of closure syntax in swift - which one is correct?

我很好奇這些語法語句中哪一個(更)正確。 游樂場愉快地編寫了兩個案例。

方法1

// copied from SO and this appears clear to me
UIView.animate(
    withDuration: 3.0,
    animations: {

    },
    completion: { (Bool) in
        // completion code
    }
)

方法2

UIView.animate(
    withDuration: 3.0,
    animations: {

        // code

    }) {(Bool) in
      // code when finished?
      // argument label completion missing?
    }

為什么第二種方法中的圓括號在最后一個參數之前被關閉? 或者是UIView.animation另一個實現?

兩者都是正確的。

  1. 它是函數調用中常用的閉包語法。

  2. 它代表一個尾隨閉包

如果需要將閉包表達式作為函數的最終參數傳遞給函數,並且閉包表達式很長,則將其寫為尾隨閉包可能很有用。 在函數調用的括號之后寫入尾隨閉包,即使它仍然是函數的參數。 使用尾隨閉包語法時,不要將閉包的參數標簽寫為函數調用的一部分。

您可以從https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html了解有關尾隨閉包的更多信息。

兩種方法的區別如下:

方法1: 定期關閉

方法2: 尾隨閉合 函數簽名中的最后一個閉包參數可以用較短的語法編寫。 如果第二個參數是completion ,並且animations參數將是最后一個,則尾隨閉包將應用於動畫等。因此它必須作為最后(或唯一)閉包參數。

如果您錯過了completion標簽,您可以像這樣輸入:

UIView.animate(withDuration: 3.0, animations: {

 }) {(completion: Bool) in

 }

為了完成你的問題:它是相同函數的相同實現 ,但語法不同

暫無
暫無

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

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