JSON Paktet decoden

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • ThisIsBeat schrieb:

    Also einmal hast du die Variable items zu folgendem geändert. Ich meine mit dem ersten RootElement in items, gibst du den Type an. RootElement() ist dann der Defaultwert. Doch warum habe ich dann keine Optional-Prüfung mehr ?
    Weil die Variable items nun nicht mehr den Typ RootElement?, sondern den Typ RootElement hat, also kein „Optional“ mehr ist. Zum Thema „Optionals“ hatte ich hier schon mal was geschrieben.RootElement() erzeugt eine Instanz vom Typ RootElement, denn nicht optionale Variablen müssen initialisiert werden.

    ThisIsBeat schrieb:

    Dann sehe ich hast du die Optionals für let url und let data mit Guard gelöst
    Damit das Programm nicht abstürzt, falls einer der beiden Werte Optional.none ist.

    ThisIsBeat schrieb:

    self.items = (try? decoder.decode(RootElement.self, from: data)) ?? RootElement()

    Du hast ja in dem Kommentar dazu geschrieben das RootElement im Fall der Fälle als Defaultwert dient. Doch was genau ?
    So ein JSON-Decoder kann ja auch mal fehlschlagen (Daten korrupt, Format geändert, etc.) und deshalb kann der Decoder auch mal einen Error „throwen“. Ein try! würde wieder das Programm abstürzen lassen, deshalb habe ich try? verwendet. Das hat aber zur Folge, dass der try?-Ausdruck den Typ RootElement? (Optional<RootElement>) ergibt, also auch nil sein kann. Die Variable items ist aber jetzt vom Typ RootElement und darf deshalb kein nil zugewiesen werden. Da kommt dann der „Nil-Coalescing Operator“ ?? ins Spiel, der dann einfach eine neue Instanz vom Typ RootElement zurück gibt.

    ThisIsBeat schrieb:

    Also woran ist es dann im wesentlichen bei mir gescheitert ? Daran das ich Optionals verwendet habe, es durch den asynchronen dataTask keine greifbaren Daten gab und die App dann gecrasht ist ?
    Zum Teil ist die Verwendung von Optionals schuld daran, aber das entscheidende Problem war der Umgang mit den Optionals, zum Beispiel diese Zeile:

    return (self.items?.data?.count)!

    Das Problem ist rot markiert. So lange die Daten noch (asynchron) geladen und decodiert werden entspricht die Zeile folgendem:

    return (nil)!

    Und dann macht's halt bumm.
  • Mac & i Test Abo
  • Ich schreibe das ganze jetzt einfach mal hier noch mit dazu. Ich bin gerade nämlich dabei die Profilbilder aus dem JSON-Paket anzeigen zu lassen. Ich habe vor die Bilder über die URL mit Hilfe des Pfads im JSON-Paket zu laden. Doch wie würdet ihr dabei am besten vorgehen ?

    Es gibt ja verschiedene Mittel und Wege um sowas zu realisieren doch ich bin nicht wirklich sicher welche Methode sich für meinen Fall am besten eignet da ich vorhabe das ganze ja in einer TableView zu laden. Hat vielleicht jemand mit so etwas schon Erfahrung und kennt vielleicht sogar einen Link auf dem ich mich einlesen könnte ?

    Habe nämlich bereits Methoden mit Alamofire, SDWebImage und und und gesehen doch ich bin mir wie gesagt unsicher :)