带闭包的功能

使用接收和执行闭包的函数对于发送要在别处执行的代码块非常有用。我们可以从允许我们的函数接受一个可选的闭包开始(在这种情况下)将返回 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