使用闭包传递数据(传回数据)

而不是使用委托模式,将实现分割为 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 块的语法不是那么容易使代码更具可读性