【发布时间】:2016-06-10 04:54:32
【问题描述】:
我知道有多种方法可以将数据从一个控制器传回另一个控制器,例如 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)
}
}
【问题讨论】:
-
这种方法没有问题,但请注意了解您的闭包如何捕获值并创建保留周期。
-
是的,应该注意保留周期
标签: ios swift closures objective-c-blocks