IOS-APP mit Login/Register und UserArea etc..

  • Neu

    Lenon schrieb:

    da bricht nicht der gesamte Compiler zusammen, wenn ein "String" den Wert nil … enthält...

    Da bricht kein Compiler zusammen. Der Swift-Compiler sagt Dir zu Compiletime frühzeitig, daß da Daten so nicht zusammenpassen. Das ist besser, als wenn das Programm zur Laufzeit abraucht oder mit falschen Daten einfach weitermacht.

    In Swift hat auch niemals ein String den Wert nil... Aber das ist zu technisch und hier der Mühe nicht wert...

    Nochmals. Ohne weitere Einblicke in das, was Du machst, kannst Du keine konkrete Hilfe erwarten. Alles andere ist Stochern im Nebel.
    Twix heißt jetzt Raider!
  • Neu

    torquato schrieb:

    Lenon schrieb:

    da bricht nicht der gesamte Compiler zusammen, wenn ein "String" den Wert nil … enthält...
    Da bricht kein Compiler zusammen. Der Swift-Compiler sagt Dir zu Compiletime frühzeitig, daß da Daten so nicht zusammenpassen. Das ist besser, als wenn das Programm zur Laufzeit abraucht oder mit falschen Daten einfach weitermacht.

    In Swift hat auch niemals ein String den Wert nil... Aber das ist zu technisch und hier der Mühe nicht wert...

    Nochmals. Ohne weitere Einblicke in das, was Du machst, kannst Du keine konkrete Hilfe erwarten. Alles andere ist Stochern im Nebel.
    Wie ich glaube schon erwähnt habe, lese ich die JSON folgendermaßen aus;

    Quellcode

    1. //Now we can access value
    2. let status = parseJSON["status"] as? String
    3. let msg = parseJSON["message"] as? String
    4. let id = parseJSON["id"] as? String
    5. let username = parseJSON["username"] as? String
    6. let mail = parseJSON["email"] as? String
    7. let fullname = parseJSON["fullname"] as? String
    8. let ava = parseJSON["ava"] as? String
    9. nun überprüfe ich die Daten so:
    10. //If status, msg, id, username, mail, fullname and ava is not nil
    11. if (status != nil){
    12. self.userStatus = status!
    13. }
    14. if (msg != nil){
    15. self.userMsg = msg!
    16. }
    17. if (id != nil){
    18. self.userId = id!
    19. }
    20. if (username != nil){
    21. self.userUsername = username!
    22. }
    23. if (mail != nil) {
    24. self.userMail = mail!
    25. }
    26. if (fullname != nil){
    27. self.userFullname = fullname!
    28. }
    29. if (ava != nil){
    30. self.userAva = ava!
    31. }
    32. //Setting parameter into UserAreaController
    33. if (self.userStatus == "200"){
    34. //User is registered
    35. self.userRegistered()
    36. }else{
    37. //Registration failed
    38. self.registrationFailed()
    39. }
    Alles anzeigen






    Ah shit... ich habe mich mal komplett daneben ausgedrückt... Das Alte Thema ist schon gelöst.... Das is mir jetzt aber peinlich -.-.... Also nochmal von vorne... Die Daten habe ich erfolgreich ausgelesen, und mittels dem if in eine Variable gespeichert, sofern z.B Ava nicht nil ist. Die Deklaration sieht dann ganz oben direkt unter der class (nicht in ner Methode mir fällt grad nur nicht der Name ein) so aus:


    Quellcode

    1. var userAva: String = ""

    Nun möchte ich die Daten an die andere Klasse übermitteln... Dies versuche ich so:



    Quellcode

    1. //Function userRegistered Calling UserArea
    2. func userRegistered(){
    3. let myVC = storyboard?.instantiateViewController(withIdentifier: "UserAreaViewController") as! UserAreaViewController
    4. //Setting Data
    5. myVC.userId = self.userId
    6. myVC.userUsername = self.userUsername
    7. navigationController?.pushViewController(myVC, animated: true)
    8. let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "UserAreaViewController") as UIViewController
    9. // .instantiatViewControllerWithIdentifier() returns AnyObject! this must be downcast to utilize it
    10. self.present(viewController, animated: false, completion: nil)
    11. }
    12. }
    Alles anzeigen
    in meinem User Area View Controller habe ich es folgendermaßen drin:


    Quellcode

    1. //Variables for User
    2. var userId: String = ""
    3. var userUsername: String = ""
    4. var userFullname: String = ""
    5. var userAva: String = ""
    6. @IBOutlet weak var testTextField: UILabel!
    7. override func viewDidLoad() {
    8. super.viewDidLoad()
    9. // Do any additional setup after loading the view.
    10. print(userId)
    11. print(userUsername)
    Alles anzeigen

    print dient hier nur zu Testzwecken... Jetzt bekomme ich aber nen Compiler nil Error, und die ganze App Frezzt. Irgendwie ist mir das unlogisch, da Die string ja zumindest "" besitzen?!...

    Sorry nochmal für das dumme Missverständnis... Ich glaube ich sollte nach 30 Stunden programmieren mal ne kleine Pause einlegen..
  • Neu

    Lenon schrieb:

    Wie ich glaube schon erwähnt habe, lese ich die JSON folgendermaßen aus;

    Quellcode

    1. //Now we can access value
    2. let status = parseJSON["status"] as? String
    3. let msg = parseJSON["message"] as? String
    4. let id = parseJSON["id"] as? String
    5. let username = parseJSON["username"] as? String
    6. let mail = parseJSON["email"] as? String
    7. let fullname = parseJSON["fullname"] as? String
    8. let ava = parseJSON["ava"] as? String
    9. nun überprüfe ich die Daten so:
    10. //If status, msg, id, username, mail, fullname and ava is not nil
    11. if (status != nil){
    12. self.userStatus = status!
    13. }
    14. if (msg != nil){
    15. self.userMsg = msg!
    16. }
    17. if (id != nil){
    18. self.userId = id!
    19. }
    20. if (username != nil){
    21. self.userUsername = username!
    22. }
    23. if (mail != nil) {
    24. self.userMail = mail!
    25. }
    26. if (fullname != nil){
    27. self.userFullname = fullname!
    28. }
    29. if (ava != nil){
    30. self.userAva = ava!
    31. }
    32. //Setting parameter into UserAreaController
    33. if (self.userStatus == "200"){
    34. //User is registered
    35. self.userRegistered()
    36. }else{
    37. //Registration failed
    38. self.registrationFailed()
    39. }
    Alles anzeigen

    Dieser ganze Bloat mit den aufgebauschten if != nil-Abfragen ließe sich in etwa so kondensieren:

    Quellcode

    1. guard
    2. let status = parseJSON["status"] as? String, status == "200",
    3. let msg = parseJSON["message"] as? String,
    4. let id = parseJSON["id"] as? String,
    5. let username = parseJSON["username"] as? String,
    6. let mail = parseJSON["email"] as? String,
    7. let fullname = parseJSON["fullname"] as? String,
    8. let ava = parseJSON["ava"] as? String
    9. else {
    10. registrationFailed()
    11. // exit scope
    12. }
    13. userStatus = status
    14. userMsg = msg
    15. userId = id
    16. userUsername = username
    17. userMail = mail
    18. userFullname = fullname
    19. userAva = ava
    20. userRegistered()
    Alles anzeigen

    Was jetzt Dein andres Problem ist, verstehe ich nicht.
    Twix heißt jetzt Raider!
  • Neu

    Lenon schrieb:

    torquato schrieb:

    Lenon schrieb:

    Jedoch liefert mir mein Backend gleichzeitig alle relevanten Daten in einem Array, die bevor der Spieler in die UserArea geleitet wird, überprüft werden müssen, um so die UserArea dementsprechend anzuzeigen.
    Und Du würdest in einer anderen Sprache als Swift auf Überprüfung der Konsistenz dieser Rückgabedaten verzichten?
    Naja... In Java gibt es da einfache Methoden bzw da bricht nicht der gesamte Compiler zusammen, wenn ein "String" den Wert nil bzw in Java null enthält...
    Tut sie in Swift auch nicht zwangsläufig, nur wenn du es selbst so baust.