使用閉包傳遞資料(傳回資料)

而不是使用委託模式,將實現分割為 UIViewController 類的各個部分,你甚至可以使用 closures 來傳遞資料。通過假設你正在使用 UIStoryboardSegue,在 prepareForSegue 方法中,你可以輕鬆地一步設定新控制器

final class DestinationViewController: UIViewController {
    var onCompletion: ((success: Bool) -> ())?

    @IBAction func someButtonTapped(sender: AnyObject?) {
        onCompletion?(success: true)
    }
}

final class MyViewController: UIViewController {
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    
        guard let destinationController = segue.destinationViewController as? DestinationViewController else { return }
    
        destinationController.onCompletion = { success in
            // this will be executed when `someButtonTapped(_:)` will be called
            print(success)
        }
    }
}

這是一個使用的例子,最好在 Swift 上使用,Objective-C 塊的語法不是那麼容易使程式碼更具可讀性