Swift @State, Liste und Button

Aktuell mache ich an einem Kurs von der Website „CodeWithChris.com“ namens „iOS Foundations (SwiftUI)“. Eine Sache, die mir bei dem Kurs gut gefällt ist, dass es nach jeder Lesson eine Challenge gibt.

Die Challenge, die ich als letztes gemacht habe, beinhaltet einen View. Der View hat eine Variable namens „list“. Die Variable ist ein Array aus Int und ist anfangs leer. Die Variable verwendet einen @State Property Wrapper. Der Property Wrapper @State muss verwendet werden, weil der View ein struct und keine class ist. Ein struct kann nicht die eigenen Variablen ändern. Durch den Property Wrapper @State wird laut der Apple Dokumentation die Variable nicht in der struct selbst gespeichert, sondern von SwiftUI gemanagt und gespeichert.

Der View selbst besteht aus einem vertikalen Stack. Dieser wiederum beinhaltet eine Liste und drei Buttons.

An die Liste werden Parameter übergeben. Es wird der Array „list“ übergeben und die id: \.self. Was genau diese id bedeutet und wie sie funktioniert weiß ich nicht. Ich weiß nur, dass die id bei einfachen Typen wie Array und Int als .self gesetzt werden kann und bei komplexeren Formen wie Klassen dies nicht möglich ist. Die Liste zeigt dann für jedes „listItem“ in dem Array ein Textfeld mit dem Wert an.

Der erste Button ruft als Aktion eine Methode auf und die Methode fügt neue Zahlen zwischen 1 und 10 zur Liste hinzu, bis eine 7 hinzugefügt wurde. Um das zu erreichen, musste ich eine repeat-while Schleife nutzen, weil die Kondition erst am Ende überprüft werden soll. Ansonsten wird die letzte Zahl 7 nicht mehr zur Liste hinzugefügt.

Der zweite Button ruft ebenfalls eine Methode auf. Die Methode nutzt eine for Schleife und erhöht jeden wert der Liste um eins. Zuerst habe ich eine for-each Schleife benutzen. Da bei dieser Schleife aber nur eine Kopie des Wertes im Array erstellt wird, konnte ich diesen Wert nicht ändern. Daher habe ich anstatt (for element in array) den Ausdruck (for index in 0..<array.count) genutzt. Somit konnte ich mit dem Index auf alle Elemente des Arrays zugreifen und diese auch ändern. Ich erinnere mich eine map Funktion zu kennen, allerdings wusste ich den Syntax dazu nicht mehr, weshalb ich mich für diese Methode entschieden habe.

Der dritte Button löscht alle Elemente aus dem Array.

Ich habe die Funktionen die von den ersten beiden Button aufgerufen werden erst im Nachhinein erstellt. Dabei habe ich die in Xcode eingebaute Möglichkeit „Extract in Method“ gewählt. Dann hat Xcode die Funktionen für mich extrahiert. Allerdings sind die Funktionen jetzt „fileprivate“. Nach kurzer Suche im Internet habe ich verstanden, dass private nur in der eigenen Klasse oder Struct sichtbar ist und fileprivate die Möglichkeit bietet aus einer anderen Klasse oder Struct auf die Methode zuzugreifen, wenn diese sich im selben File befindet.

SwiftUI View File:

.swift File

 

Mich benachrichtigen, wenn es einen neuen Beitrag gibt.

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