2017-12-07 2 views
0

Ich habe zwei View-Controller, der erste View-Controller enthält das Textfeld für die Eingabe (E-Mail/Benutzername) des Benutzers. Der zweite View-Controller enthält das Textfeld für die (Passwort-) Eingabe des Benutzers. Der zweite View-Controller enthält auch einen Button, um den FireBase-Auth-Code auszuführen, um einen neuen Benutzer zu erstellen. Ich möchte den E-Mail-Text aus der ersten View-Controller-Klasse eins übernehmen und diese Daten in die zweite View-Controller-Klasse übertragen, um erfolgreich einen neuen Benutzer zu erstellen. Ich habe versucht, eine globale Variable zu verwenden, aber es scheint nicht zu funktionieren, hilft dieses Dilemma? Jede Hilfe wird geschätzt, danke!Firebase Auth Erstellen eines neuen Benutzers mit Texteingabe von einer anderen Klasse

enter image description here

+0

Bitte geben Sie keine Code als Bilder. Postleitzahl als Code – dwilliss

+0

OK danke @dwilliss –

+0

Sie sollten globale Variablen für Benutzer-sensible Informationen wie E-Mail-Adressen nicht verwenden, wenn überhaupt. Zumindest könnten Sie den gleichen viewController für beide Textfelder mit privaten Variablen verwenden oder Daten zwischen viewControllern mit prepareForSegue() übergeben. Bitte, können andere, die Benutzerüberprüfung in ihren Apps beigetragen haben bessere Strategien als das, was ich vorgeschlagen habe ... –

Antwort

0

Eine globale Variable, die aber nicht der beste Weg, um dies zu realisieren, kann funktionieren, wenn man es richtig macht:

1 eine globale Variable deklariert, die außerhalb beiden Klassen (don sein sollten ‚t eine Struktur) verwendet werden:

var emailOrUsername: String = "" 

2 Umsetzung das textFieldDidEndEditing Verfahrens (unter der Annahme, dass Sie das Textfeld gesetzt haben delegieren self) zu sein, und die Zeichenfolge in dem Textfeld zuzuordnen emailOrUsername:

func textFieldDidEndEditing(_ textField: UITextField) { 
    emailOrUsername = emailTextField.text 
} 

3 Nachdem Sie zum nächsten View-Controller navigiert haben, verweisen Sie einfach auf diese Variable. Einfach.

EDIT: Obwohl diese Methode einfach scheint, wenn Ihre App immer komplizierter wird, wird es sehr schwer zu pflegen. Also, ich schlage vor, Sie überprüfen meine Antwort auf this question (das Konzept ist das gleiche: Protokolle).

Eine andere Methode, die Sie verwenden können, ist die emailOrUsername Variable in der zweiten Viewcontroller zu definieren, dann, in Ihrem prepareForSegue:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let secondViewController = segue.destination as? SecondViewController { 
     secondViewController.emailOrUsername = emailTextField.text! 
    } 
} 
+0

Wenn ich versuche, die Variable referenzieren Ich bekomme "Initialisierer für bedingte Bindung muss optionalen Typ, nicht 'String" Fehler in der Firebase Auth-Teil. –

+0

@DontWorry Wie verweisen Sie darauf (Code)? – Xcoder

+0

@DontWorry Verweise nicht auf die Variable in einer if-Anweisung, da meine Antwort den Typ 'String' verwendet, nicht' String? '. Wenn Sie eine Variable vom Typ 'String?' Verwenden und in einer if-Anweisung darauf verweisen möchten, ändern Sie einfach den Typ. Es ist nicht wirklich wichtig. – Xcoder

0

ich in diesem Fall nicht die Verwendung einer globalen Struktur empfehlen, aber wenn Sie möchte das machen. Sie können eine neue swift-Datei erstellen und Ihre Struktur in diese Datei verschieben. Wie folgt aus:

struct GlobalData { 
    var email: String? = nil 
} 

var globalData = GlobalData() 

Sie einen beliebigen Wert in dieser Struktur erhalten können globalData.email

mit Aber ich denke, es macht mehr Sinn für Sie, die Daten zu übergeben, wenn Sie segue. Wenn Sie nicht wissen, wie Sie eine Überfahrt machen, schauen Sie sich this question an. Dann können Sie etwas tun:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "nameOfYourSegue" { 
      let controller = segue.destination as! NameOfViewControllerYourGoingTo 
      controller.email = email 
     } 

Sie bei this und this und this für weitere Informationen suchen. Lass es mich wissen, wenn du noch Fragen hast.

Verwandte Themen