1. 程式人生 > >swift閉包新手詳解(新手必看)

swift閉包新手詳解(新手必看)

alt 關鍵字 itl 代碼塊 回調 類型 例子 圖片 使用

閉包的含義

閉包是自包含的函數代碼塊,可以在代碼中被傳遞和使用。Swift 中的閉包與 C 和 Objective-C 中的代碼塊(blocks)以及其他一些編程語言中的匿名函數比較相似。

技術分享圖片

閉包可以捕獲和存儲其所在上下文中任意常量和變量的引用。被稱為包裹常量和變量。 Swift 會為你管理在捕獲過程中涉及到的所有內存操作。

閉包的主要優化

  • 利用上下文推斷參數和返回值類型
  • 隱式返回單表達式閉包,即單表達式閉包可以省略 return 關鍵字
  • 參數名稱縮寫
  • 尾隨閉包語法

閉包的應用場景

閉包和block的應用場景是一樣的.(當你覺得這種情況在oc中用block能實現的,那麽在swift中用閉包也能實現)

1,異步執行完成回調.

2,控制器間回調

3,自定義視圖回調

閉包的三種模式

閉包有三種形式,1,沒有參數沒有返回值的閉包(最簡單的閉包)

技術分享圖片這裏有一點需要註意的,一定要去執行調用閉包,否則裏邊代碼不會執行

2,帶參數沒有返回值的閉包

技術分享圖片

3,帶參數帶返回值的閉包

技術分享圖片這裏要註意的是,返回值需要進行操作,不然會報警告.

註意!

in 去區分去分割函數的定義和實現,說通俗點就是分割 傳參和後續操作的分割!!!

閉包回調

閉包回調,也就是說將閉包以參數的形式進行回調.

技術分享圖片這裏需要註意的是,swift中的GCD和oc中的GCD不同.

尾隨閉包

尾隨閉包是調比較簡潔的寫法

技術分享圖片這裏需要註意的是,"大多數",一般的閉包系統會自動幫我們做到尾隨閉包, 並不是所有,例如上邊GCD嵌套中.

技術分享圖片

那麽我們根據上邊尾隨閉包的含義來對它進行修改.技術分享圖片把該回調的最後一個形參以及最外層的小括號刪除即可.

逃逸閉包

當一個閉包作為參數傳到一個函數中,但是這個閉包在函數返回之後才被執行,我們稱該閉包從函數中逃逸。當你定義接受閉包作為參數的函數時,你可以在參數名之前標註 @escaping,用來指明這個閉包是允許“逃逸”出這個函數的。

一種能使閉包“逃逸”出函數的方法是,將這個閉包保存在一個函數外部定義的變量中。舉個例子,很多啟動異步操作的函數接受一個閉包參數作為 completion handler。這類函數會在異步操作開始之後立刻返回,但是閉包直到異步操作結束後才會被調用。在這種情況下,閉包需要“逃逸”出函數,因為閉包需要在函數返回之後被調用。例如:

var completionHandlers: [() -> Void] = []
func someFunctionWithEscapingClosure(completionHandler: @escaping () -> Void) {
    completionHandlers.append(completionHandler)
}

新手分享,不喜勿噴!!!求分享,求擴散.求轉發.

swift閉包新手詳解(新手必看)