Schleifen in Swift UI?

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

  • Schleifen in Swift UI?

    Hallo zusammen,

    ich komme aus der PHP Welt und bin in der iOS Entwicklung noch nicht sehr erfahren. Gerade versuche ich zusammen mit meiner Tochter eine TicTacToe - App zu schreiben. Wir haben also neun Buttons, die beim Klick ihr Aussehen verändern, etwa so:

    Quellcode

    1. Button(action: {
    2. print("Button geklickt")
    3. self.feld1 = 1
    4. }, label: {
    5. if(self.feld1 == 0) {
    6. // ein graues Quadrat wird angezeigt
    7. } else if(self.feld1 = 1) {
    8. // Ein Bild mit einem Kreuz wird angezeigt
    9. } else {
    10. // Ein Bild mit einem Kreis wird angezeigt
    11. }
    12. })
    Alles anzeigen
    Alles schön und gut, dann dachte ich mir, dass es doch kein schöner Programmierstil sei, einen nahezu identischen Code 9 x zu schreiben. Wo kommen wir da hin, wenn wir "4 gewinnt" in einem Spielfeld mit 40 Feldern programmieren wollen? :D Deshalb wollte ich in Swift UI den Button in einer For-Schleife innerhalb des HStack 3 x ausgeben lassen, den ganzen HStack wiederum innerhalb des VStack in einer weiteren Schleife ebenso 3 mal anzeigen lassen - dann hätten wir neun Felder. Nix da, weil "Closure containing control flow statement cannot be used with function builder 'ViewBuilder'". Toll. Die mir spontan kommenden vulgären Schimpfwörter spreche ich jetzt wegen meiner 10-jährigen Tochter, die dabei sitzt, lieber nicht aus. X/ Es ist auch nicht schlecht für sie, wenn sie den Code für einen Button mehrmals schreibt. So lernt man. Aber dennoch kann das nicht die Lösung sein. Wie kann ich also in Swift UI ein Element mehrmals generieren ohne den Code hierfür tatsächlich mehrfach schreiben zu müssen? Danke im Voraus für eure Hilfe!

    Arek
  • Hi Arek!

    Finde ich ja cool, dass Du mit Deiner Tochter zusammen programmierst :) Ich kenne mich leider mit SwiftUI so überhaupt nicht aus, aber damit Eurer gemeinsames Projekt nicht in's Stocken kommt, folgende Vermutung:

    ForEach

    scheint in SwiftUI ein Sprachkonstrukt zu sein, um Elemente in Zählschleifen anzulegen.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Schleifen oder grosse Logik gibt es in SwiftUI nicht. Es gibt zwei PropertyWrapper welche über Arrays/Sets/Collections iterieren. Das sind: List/ForEach.

    In aller Regel bist gut beraten, in Views keine Logik zu implementieren. Diese lagert man in Controller, aus, welche man am besten als class implementiert. Hier kommt die Logik rein. Hier kannst, auch wenn man es nicht tun sollte, Views zurück liefern, sollte man aber nicht. hier triggert man nur SwiftUI welche auf die Statusveränderung reagiert. Da bist dann bei reactive UI angekommen. Hast eine klare Trennung zwischen UI und Logik.

    Aber einTipp: Vergiss PHP, die imperative Programmierung, das ist ein anderes Paradigma, SwiftUI ist reactive! Eine ganz andere Schule, andere Denkweise.

    Du gibst nur noch den Status der Daten vor, die UI kümmert sich selbständig um die korrekte Darstellung. Der musst nicht mehr sagen, wie sie sich darstellen soll.

    Schöne Grüsse
    Wolf