使用闭包传递数据
Pass Data using Closures
我知道有多种方法可以将数据从一个控制器传回另一个控制器,例如 Delegates, NSNotifications
。我正在使用另一种方式使用 Closures
将数据数据传回。我只想知道我如何使用如下所示的块传递任何数据是否安全,或者我应该避免这种方法。
第一个ViewController(我把第二个ViewController作为对象)
@IBAction func push(sender: UIButton) {
let v2Obj = storyboard?.instantiateViewControllerWithIdentifier("v2ViewController") as! v2ViewController
v2Obj.completionBlock = {(dataReturned) -> ()in
//Data is returned **Do anything with it **
print(dataReturned)
}
navigationController?.pushViewController(v2Obj, animated: true)
}
第二个ViewController(数据传回第一个VC)
import UIKit
typealias v2CB = (infoToReturn :NSString) ->()
class v2ViewController: UIViewController {
var completionBlock:v2CB?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func returnFirstValue(sender: UIButton) {
guard let cb = completionBlock else {return}
cb(infoToReturn: returnFirstValue)
}
@IBAction func returnSecondValue(sender: UIButton) {
guard let cb = completionBlock else {return}
cb(infoToReturn: returnSecondValue)
}
}
这是一个非常好的和合理的方法,比通知要好得多。
看看 Cocoa API 的 演变 你会注意到 Apple 已经用块/闭包替换了越来越多的委托 API多年来。
我知道有多种方法可以将数据从一个控制器传回另一个控制器,例如 Delegates, NSNotifications
。我正在使用另一种方式使用 Closures
将数据数据传回。我只想知道我如何使用如下所示的块传递任何数据是否安全,或者我应该避免这种方法。
第一个ViewController(我把第二个ViewController作为对象)
@IBAction func push(sender: UIButton) {
let v2Obj = storyboard?.instantiateViewControllerWithIdentifier("v2ViewController") as! v2ViewController
v2Obj.completionBlock = {(dataReturned) -> ()in
//Data is returned **Do anything with it **
print(dataReturned)
}
navigationController?.pushViewController(v2Obj, animated: true)
}
第二个ViewController(数据传回第一个VC)
import UIKit
typealias v2CB = (infoToReturn :NSString) ->()
class v2ViewController: UIViewController {
var completionBlock:v2CB?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func returnFirstValue(sender: UIButton) {
guard let cb = completionBlock else {return}
cb(infoToReturn: returnFirstValue)
}
@IBAction func returnSecondValue(sender: UIButton) {
guard let cb = completionBlock else {return}
cb(infoToReturn: returnSecondValue)
}
}
这是一个非常好的和合理的方法,比通知要好得多。
看看 Cocoa API 的 演变 你会注意到 Apple 已经用块/闭包替换了越来越多的委托 API多年来。