2016-06-10 9 views
1

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) 

    } 
} 
+0

Nichts ist falsch mit diesem Ansatz, aber achten Sie darauf, wie Ihre Schließungen Werte erfassen und Retain-Zyklen erstellen können. – Jonah

+0

Ja Retain-Zyklus sollte beachtet werden – ankit

Antwort

2

, dass ein sehr gut ist und vernünftiger Ansatz und viel besser als Benachrichtigungen.

Mit Blick auf die Evolution von Cocoa API werden Sie feststellen, dass Apple mehr und mehr Delegate API mit Blöcken/Schließungen im Laufe der Jahre ersetzt hat.

+0

Eine Sache mehr möchte ich wissen, Die Art und Weise, wie ich mehrere verschiedene Werte zurück übergebe, ist sicherer Weg oder sollte ich Daten mit Methoden zurückgeben, die Block als Parameter enthält. – ankit

+0

Es ist völlig in Ordnung. Das ist einer der Vorteile von Verschlüssen. – vadian

+0

Danke Mann !! Du hast wirklich die Verwirrung von meinen Schultern genommen – ankit