使用閉包傳遞資料(傳回資料)
而不是使用委託模式,將實現分割為 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 塊的語法不是那麼容易使程式碼更具可讀性