我知道有多种方法可以将数据从一个控制器传回另一个控制器,如Delegates, NSNotifications
。我使用另一种方式使用Closures
来传回数据。我只想知道如何通过下面的块传递任何数据是安全的方式,还是应该避免使用这种方法。使用闭包传递数据
第一视图控制器(在这里我做第二个视图控制器的对象)
@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)
}
二视图控制器(其中数据传回第一个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)
}
}
这种方法没有问题,但要小心了解您的闭包如何捕获值并可以创建保留周期。 – Jonah
是保留周期应该注意的 – ankit