帶閉包的功能

使用接收和執行閉包的函式對於傳送要在別處執行的程式碼塊非常有用。我們可以從允許我們的函式接受一個可選的閉包開始(在這種情況下)將返回 Void

func closedFunc(block: (()->Void)? = nil) {
    print("Just beginning")

    if let block = block {
        block()
    }
}

現在已經定義了我們的函式,讓我們呼叫它並傳入一些程式碼:

closedFunc() { Void in
    print("Over already")
}

通過使用帶有函式呼叫的尾隨閉包,我們可以傳入程式碼(在本例中為 print),以便在我們的 closedFunc() 函式中的某個點執行。

日誌應該列印:

剛開始

已經結束了

更具體的用例可能包括在兩個類之間執行程式碼:

class ViewController: UIViewController {

    override func viewDidLoad() {
        let _  = A.init(){Void in self.action(2)}
    }

    func action(i: Int) {
        print(i)
    }
}

class A: NSObject {
    var closure : ()?

    init(closure: (()->Void)? = nil) {
        // Notice how this is executed before the  closure
        print("1")
        // Make sure closure isn't nil
        self.closure = closure?()
    }
}

日誌應該列印:

1

2