【Swift】關(guān)于閉包的幾種寫法

閉包

  • 閉包是可以在你的代碼中被傳遞和引用的功能性獨(dú)立代碼塊。

  • 閉包能夠捕獲和存儲(chǔ)定義在其上下文中的任何常量和變量的引用,這也就是所謂的閉 合并包裹那些常量和變量,因此被稱為“閉包”,Swift 能夠?yàn)槟闾幚硭嘘P(guān)于捕獲的內(nèi)存管理的操作。

//  定義閉包
類型 : (形參) -> (返回值)

//  閉包執(zhí)行回調(diào)
類型(值)

//  閉包實(shí)現(xiàn)回調(diào)
{
    (形參) -> (返回值) in
    //  執(zhí)行代碼
}

簡單舉個(gè)例子:在方法中定義閉包實(shí)現(xiàn)回調(diào)傳值。

### WJKHttpTool.swift

import Foundation

class WJKHttpTool : NSObject {
     //  MARK:定義閉包
     func loadData(completion : (_ result : Bool) -> ()) -> () {
        //  MARK:閉包執(zhí)行回調(diào)
        completion(true)
    }
}
### WJKViewController.swift

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let httpTool : WJKHttpTool = WJKHttpTool()
        
        //  MARK:閉包實(shí)現(xiàn)回調(diào)
         httpTool.loadData (completion: { (result) -> () in
             print(result)
        })
}

尾隨閉包:

  1. 如果閉包是函數(shù)的最后一個(gè)參數(shù),則可以將閉包寫在 () 后面。
  2. 如果函數(shù)只有一個(gè)參數(shù),并且這個(gè)參數(shù)是閉包,那么 () 可以不寫。
上述閉包則為尾隨閉包則可以寫成
httpTool.loadData() { (result) -> () in
    print(result)
}

當(dāng)然開發(fā)中建議(包括代碼中敲回車代碼補(bǔ)全)寫成
httpTool.loadData { (result) -> () in
    print(result)
}

擴(kuò)展
  • 如果閉包沒有參數(shù),沒有返回值部分內(nèi)容可以省略
如上述例子中沒有返回值則可以寫成
httpTool.loadData (completion: { (result) in
    print(result)
})

當(dāng)然如果是尾隨閉包則可以寫成
httpTool.loadData { (result) in
    print(result)
}
//  所以上述寫法就是最簡寫法(官方推薦寫法)了
  • 解決循環(huán)引用
httpTool.loadData {[weak self] (result) in
    print(result)
    self?.view.backgroundColor = UIColor.white
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容