2016-08-11 3 views
0

Ich versuche, Informationen von einer Swift-Datei an einen anderen View-Controller zu übergeben, indem ich das Delegate-Protokoll und eine andere Init-Klassendatei verwende. Mein Problem tritt auf, wenn ich die Variable, die ich übertragen möchte, rufe, und es erscheint als Null. Ich möchte in der Lage sein, die ageDescription von der einen schnellen Datei an eine andere zu übergeben, wenn saveButton angetippt wird. Ich habe mich gefragt, was ich ändern kann, damit die Variable aufgerufen werden kann.Problem mit der Weitergabe von Informationen zwischen Swift-Dateien

First View-Controller

@IBAction func ageChanged(sender: UISegmentedControl) { 
    switch age.selectedSegmentIndex { 
    case 0: 
     print("Under 18") 
     var ageDescription = "under 18" 
     let data = Data(ageData: ageDescription) 

    case 1: 
     print("Over 18") 
     var ageDescription = "over 18" 
     let data = Data(ageData: ageDescription) 
    case 2: 
     print("Strictly over 21") 
     var ageDescription = "strictly over 21" 
    let data = Data(ageData: ageDescription) 
    default: 
     print("IDK") 
    } 

} 

Andere View Controller

@IBAction func saveButtonTapped(sender: UIBarButtonItem) { 
    func getData(data: Data) { 
     print(data.ageData) 
    } 

Antwort

0

können Sie die Überschreibung prepareForSegue verwenden.

Erstellen Sie einfach eine Variable in der anderen VC, in die Sie segmentieren, und weisen Sie sie der Überschreibung zu.

Sie müssen die ageDescription-Variable auch außerhalb einer Methode als global deklarieren.

+0

I habe die prepareForSegue-Überschreibung in meine OtherVC eingegeben, aber sie erkennt self.ageDescription nicht. Vielleicht habe ich die globale Variable nicht richtig eingerichtet? Ich initialisierte [var ageDescription: String = String()] in der ersten VC. Danke für deine Geduld, denn ich bin neu in Swift. – Kevin

+0

Sie möchten die Methode "segue" auf dem View-Controller mit der Schaltfläche überschreiben, die dieses Segment ausführt, aus der Sie nicht kommen. Und stellen Sie sicher, dass die Variablendeklaration innerhalb der Klasse, aber nicht innerhalb einer Methode erfolgt. – TheValyreanGroup

+0

Wenn Sie das nicht herausfinden können, schreiben Sie Ihre Klassennamen und ich bearbeite meine Antwort genau so, wie Sie es tun müssen. – TheValyreanGroup

1

ein Protokoll in der Klasse Stellen in dem Sie die Daten über Viewcontroller wie diese

protocol ageDescriptionDelegte { 

    func sendageDescriptiongetData(data: Data) 
} 
class ViewController: UIViewController { 
weak var delegate: PassDateDelegte? 
override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view. 
    } 

@IBAction func saveButtonTapped(sender: AnyObject) { 
    self.delegate?.sendageDescriptiongetData(ageDescription)//pass your age description 

    } 
} 

Ihrer Ansicht Controller erhalten, wo Sie auf die Daten zugreifen wollen, entsprechen dem Protokoll

extension ViewController2: ageDescriptionDelegte { 

func sendageDescriptiongetData(data: Data) { 
print(data)// this will give you the age description 
    } 
} 
Verwandte Themen