2016-03-27 15 views
0

Zum Beispiel habe ich 2 Controller, die bereits im Speicher (Klasse 1, Klasse 2) sind. Wie kann ich auf Daten der Klasse 1 von Klasse 2 zugreifen?SWIFT-Zugangsdaten von einem anderen Controller

class Class_1: UIViewController { 

    var number:UInt8 = 1 

    override func viewDidAppear(animated: Bool) { 
     number = 8 
    } 
} 

Wie greife ich auf Nummer Variable in Class 2 und Drucken Sie Wert? Der Punkt besteht darin, keine neue Instanz zu erstellen, der Punkt besteht darin, einen Zeiger für Klasse 1 in den Speicher zu bekommen und Zugriff auf seine Daten zu erhalten.

+0

Versuchen Sie delegieren Protokoll? – iMuzahid

+0

Ich bin ziemlich neu zu schnell, können Sie mir ein Beispiel zeigen? – Alex

+0

Siehe [z.B. diese Antwort für das Übermitteln von Daten zwischen zwei verschiedenen View-Controllern mithilfe von Segmenten] (http://stackoverflow.com/a/35314768/4573247). – dfri

Antwort

0

Zunächst einmal ändern Sie den Namen Ihres Viewcontroller von Class_1 zu Class1ViewController und Class_2 zu Class2ViewController

Sie müssen die Variable Class2ViewController einzustellen, während es in Class1ViewController Initialisieren, und die Daten zu übergeben zurück aus Class2ViewController zu Class1ViewController benötigen Sie delegieren Transfer

Für die Daten Class1ViewControlle verwenden r zu Class2ViewController, öffnen Sie Ihre Class1ViewController Datei und fügen Sie die folgende prepareForSegue Methode, wenn Sie mit Storyboard

class Class1ViewController: UIViewController{ 
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "Class2ViewController" { 
      if let class2ViewController = segue.destinationViewController as? Class2ViewController { 
       class2ViewController.inforFromClass1 = "Class 2 Variable set from Class 1" 
      } 
     } 
    } 
} 

jedoch Wenn Sie xib verwenden und eine Taste zum Bewegen zu Class2ViewController von Class1ViewController, der folgende Code sollte in IBAction der Schaltfläche geschrieben werden, die Class2ViewController

auslöst

Dies ist, wie Sie die Variable auf Class2ViewController gesetzt, während es von zeigt Class1ViewController

Jetzt Nachricht von Class2ViewController zu Class1ViewController Sie Delegierten verwenden müssen, zu übergeben. Öffnen Sie Class2ViewController und fügen Sie das folgende Protokoll an der Spitze

@objc protocol Class2ViewContollerDelegate :class{ 
    func printMessageFromClass2ViewController() 
} 

class Class2ViewController: UIViewController { 
} 

hinzufügen schwachen Verweis auf die delagate in Class2ViewController Klasse und nennen es in seiner ViewDidAppear oder jede andere Methode, die Sie mögen,

@objc protocol Class2ViewContollerDelegate :class{ 
    func printMessageFromClass2ViewController() 
} 

class Class2ViewController: UIViewController { 
    weak var delegate: Class2ViewControllerDelegate? 
    override func viewDidAppear(animated: Bool) { 
     self.delegate?.printValueFromClass2ViewController 
    } 
} 

Nun, da wir das Protokoll in Class2ViewController definieren, müssen wir es in Class1ViewController implementieren. Zurück in Ihrem Class1ViewController Datei implementieren das Protokoll wie diese

class Class1ViewController: UIViewController, Class2ViewControllerDelegate { 
    func printMessageFromClass2ViewController(){ 
     print("hey I just printed message in Class1ViewController through its delegate in Class2ViewController") 
    } 

    // For Xibs 
    @IBAction showClass2ViewController(){ 
     let secondViewController = SecondViewController(nibName: "SecondViewController", bundle: NSBundle.mainBundle()) 
     secondViewController.infoFromClass1 = "Class 2 Variable set from Class 1" 
     self.showViewController(secondViewController, sender: self) 
    } 

    // For storyboards 
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "Class2ViewController" { 
      if let class2ViewController = segue.destinationViewController as?Class2ViewController { 
       class2ViewController.inforFromClass1 = "Class 2 Variable set from Class 1" 
      } 
     } 
    } 
} 
+2

Code-Dumps sind keine gute Antwort. Selbst wenn das Kopieren und Einfügen für den Benutzer funktioniert, ist es zweifelhaft, ob jemand jemals eine Menge durch Kopieren und Einfügen gelernt hat. – nhgrif

+0

Also was meinst du soll es neben dem geschriebenen Code erklärt werden? Übrigens wurde das Kopieren kopiert, so dass es für ihn bequem wäre, – hariszaman

+0

zu verwenden. Es ist in Ordnung, wenn das Code- & Pastable-Code-Snippet Teil Ihrer Antwort ist, aber wenn die Antwort nichts außerhalb dieses Snippets ist, hat es keine Tonne von Wert. – nhgrif

Verwandte Themen