Ich weiß, dass es mehrere Ansätze gibt, um Daten von einem Controller zum anderen wie Delegates, NSNotifications
zurückgeben. Ich verwende einen anderen Weg mit Closures
, um Daten zurück zu übergeben. Ich möchte nur wissen, ob es sicher ist, wie ich irgendwelche Daten mit Blöcken wie unten weitergeben kann oder sollte ich diesen Ansatz vermeiden.Pass Daten mit Closures
Erste Viewcontroller (wo ich Gegenstand von Second Viewcontroller machen)
@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)
}
Second Viewcontroller (wo Daten an ersten VC zurückgeführt werden)
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)
}
}
Nichts ist falsch mit diesem Ansatz, aber achten Sie darauf, wie Ihre Schließungen Werte erfassen und Retain-Zyklen erstellen können. – Jonah
Ja Retain-Zyklus sollte beachtet werden – ankit