Model View ViewModel & JSON

In den letzten Videos von CodeWithChris ging es um das Konzept „Model View ViewModel“.

Das Beispiel war eine App, die Rezepte in einer Liste anzeigen sollte. Angefangen wurde mit dem Model.

Das Modell beschreibt ein Rezept. Das Rezept ist eine Klasse oder eine Struktur und hat als Parameter einen Namen und Küche beispielsweise die italienische Küche. Damit ist das Model erst einmal vollständig.

Als Nächstes wurde ein ViewModel erstellt. Das ViewModel ist ebenfalls ein Modell, was aber kein Objekt wie ein Rezept darstellt, sondern einen View. Das ViewModel hat einen Parameter und dieser ist ein Array aus dem Model Rezept. Der Grund dafür ist, dass der View später eine Liste von Rezepten ist. Damit ist des ViewModel fertig.

Der View hat einen Parameter der Klasse ViewModel und eine Liste. Die Liste nimmt das ViewModel und greift dort auf den Array aus Rezepten zu. Dann stellt sie jedes Rezept aus dem Array als Eintrag in der Liste dar.

Damit der View automatisch aktualisiert wird, muss folgendes beachtet werden. Im View muss der Parameter ViewModel ein Propery Wrapper „@ObservedObject“ haben. Somit können Änderungen an dem Objekt festgestellt werden und dann der View neu geladen werden. Damit das möglich ist, muss das ViewModel das Protokoll „ObservableObject“ befolgen. Damit Rückmeldungen auch beim View ankommen muss noch der Parameter des ViewModels den Property Wrapper „@Published“ erhalten. Dann wird der View jedes Mal erneut geladen, wenn sich der Array ändert.

Um mehrere Objekte der Klasse Rezept in einer Liste darzustellen, muss die Klasse Rezepte das Protokoll „Identifiable“ adaptieren.

Im weiteren Verlauf wurde dieses Xcode Projekt noch um einen JSON File ergänzt.

JSON ist ein Datenformat, dass mit jedem Texteditor geöffnet werden kann. JSON steht für „JavaScript Object Notation“.

Im Fall der beschriebenen App enthält der JSON File einen Array aus Objekten. Jedes Objekt ist dabei in der Form eines Rezeptes.

Innerhalb des ViewModels werden beim Initialisieren die Daten aus dem JSON File gelesen und dann in die Rezept-Array-Variable eingesetzt. Bei größeren Projekten oder Apps würde man das Laden der Daten nicht in der initialisierenden Methode selbst machen, sondern nur eine Methode einer anderen Klasse aufrufen, um die Daten zu laden.

Um die Daten aus dem JSON File zu bekommen, muss man zuerst einen „path“ herstellen. Das ist so ähnlich wie der Pfad im Finder. Der Pfad gibt an, wo der JSON File liegt. Dann muss man mithilfe des Pfades eine URL erstellen. Mithilfe der URL kann man dann versuchen die Daten in einer Variable zu speichern. Um die Daten dann zu verwenden, muss man diese erst decodieren. Dazu benutzt man die Klasse „JSONDecoder“ von Swift. Wenn dass dann auch funktioniert hat, erhält man einen vorher festgelegten Datentyp. In meinem Fall habe ich einen Array aus Rezepten erhalten. Diesen Array habe ich dann noch in der @Published Variable gespeichert, damit der View darauf zugreifen kann.

Während des Ladens der Daten kommt es oft vor, dass eine Methode einen optionalen Wert zurückgibt oder einen Fehler wirft. Daher muss man dabei mit „guard“ Statements arbeiten und mit do – try – catch Ausdrücken.

Ich habe auch gelernt, dass es einen „JSON Validator“ gibt, mit dem es möglich ist zu schauen, ob der Syntax eines JSON Files richtig ist, oder ob er Fehler enthält. Wenn ein JSON File Fehler enthält, können die Daten daraus nicht gelesen werden und man kann diese dann auch nicht in der App verwenden.

Mich benachrichtigen, wenn es einen neuen Beitrag gibt.

 
 
Share on whatsapp
WhatsApp
Share on email
Email
Share on linkedin
LinkedIn
Share on facebook
Facebook