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