闭包

闭包是一个特殊的函数,经常用于回调

//  定义闭包
类型 : (形参) -> (返回值)

//  闭包执行回调
类型()

//  闭包实现回调
{
    (形参) -> (返回值) in
    //  执行代码
}

简单举个例子:在方法中定义闭包实现回调传值

File:WJKHttpTool.swift

import Foundation

class WJKHttpTool : NSObject {
     //  MARK:定义闭包
     func loadData(completion : (_ result : Bool) -> ()) -> () {
        //  MARK:闭包执行回调
        completion(true)
    }
}
File:WJKViewController.swift

import UIKit

class ViewController : UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let httpTool : WJKHttpTool = WJKHttpTool()
        
        //  MARK:闭包实现回调
         httpTool.loadData (completion: { (result) -> () in
             print(result)
        })
}

尾随闭包: 1.如果闭包是函数的最后一个参数,则可以将闭包写在()后面 2.如果函数只有一个参数,并且这个参数是闭包,那么()可以不写

上述闭包则为尾随闭包则可以写成
httpTool.loadData() { (result) -> () in
    print(result)
}

当然开发中建议(包括代码中敲回车代码补全)写成
httpTool.loadData { (result) -> () in
    print(result)
}

扩展
如上述例子中没有返回值则可以写成
httpTool.loadData (completion: { (result) in
    print(result)
})

当然如果是尾随闭包则可以写成
httpTool.loadData { (result) in
    print(result)
}
//  所以上述写法就是最简写法(官方推荐写法)了
httpTool.loadData {[weak self] (result) in
    print(result)
    self?.view.backgroundColor = UIColor.white
}