我知道有多種方法可以將數據從一個控制器傳回另一個控制器,如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