Einstieg in Swift

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

  • Einstieg in Swift

    Hallo,

    ich beschäftige mich nun seit ein paar Tagen mit Swift. Grundlegende Dinge, wie Schleifen If-Bedingungen usw. ist alles kein Problem. Das kann ich bereits schon von früher als ich mich mit anderen Programmiersprachen beschäftigt habe. Das ganze wurde etwas aufgefrischt und passt so weit auch mal für das erste würde ich sagen.
    Was mir allerdings extrem schwer fällt sind dieses Swift eigene Funktionen. Ich gebe mal eben ein Beispiel.

    Wenn ich nun ein Textfeld habe, dieses prüfen möchte, ob der Inhalt leer ist. Dann wäre ich bisher wie folgt vor gegangen.

    Quellcode

    1. if textfeld.text == ""
    2. {
    3. hier mein code
    4. }
    5. else
    6. {
    7. hier mein code
    8. }



    Durch die Tutorials, welche ich mir allerdings in den letzten Tagen angeschaut habe, fand ich auch heraus, dass ich das ganze wie folgt prüfen kann.

    Quellcode

    1. if textfeld.text?.IsEmpty
    2. {
    3. code
    4. }
    5. else
    6. {
    7. code
    8. }

    Nun habe ich das Problem, dass ich einfach nicht weis, wie man auf so etwas kommt. Ich würde nie im leben hier ein "?." schreiben, auser ich schlaf beim programmieren ein und mein Kopf fällt so doof auf die Tastatur.
    So geht es mir bei allen Dingen. Als weites Beispiel. Ich habe einen Button. Dieser soll bei klick einen anderen ViewController öffnen. Aus dem Tutorial folgendes entnommen.


    Quellcode

    1. @IBAction func ButtonTapped(_ sender: Any) {
    2. let newviwecontroller = self.storyboard?.instantiateViewController(withIdentifier: "NewUserViewController") as! NewUserViewController
    3. self.present(newviwecontroller,animated: true)
    4. }
    Auch hier habe ich das Problem, dass ich niemals auf solche Befehle gekommen wär. Folge dessen fällt es mir natürlich extrem schwer überhaupt etwas zu machen. Ich weis nämlich gar nicht, was es alles gibt.

    Habt ihr mir hier evtl. einen Tipp, wie ich dieses Defizit beheben kann? Wie geht ihr hier vor, wenn ihr eine neue Programmiersprache lernt?
    Bin über jeden Tipp dankbar.
  • Hallo!

    Das erste betrifft tatsächlich einen Aspekt der Programmiersprache. Textfeld.text == "" vergleicht nur mit einem Leerstring.
    text kann allerdings auch nil sein und damit abweichend vom Leerstring. Ich habe zum Test in einem Playground folgendes eingegeben:

    C-Quellcode

    1. struct TF { var text : String? }
    2. var textfeld = TF()
    3. if textfeld.text == ""
    4. {
    5. print("leer")
    6. }
    7. else
    8. {
    9. print("nicht leer")
    10. if textfeld.text == nil
    11. {
    12. print("nil")
    13. }
    14. }
    15. if textfeld.text?.isEmpty
    16. {
    17. print("isEmpty")
    18. }
    19. else
    20. {
    21. print("!isEmpty")
    22. }
    Alles anzeigen
    Die Ausgaben zeigen dir vermutlich, dass es nicht das vor dir erwartete Verhalten ist.
    Das ? hinter dem Typ (String im Beispiel) macht daraus einen Optional (Optional<String>).
    Nur Optionals dürfen nil sein. In den anderen Fällen ist sicher, dass ein Wert vorhanden ist.
    Damit kann man die Programme sicherer machen, da bestimmte Fehler zumindest stellenweise
    ausgeschlossen werden können.

    Zeile 17 führt bei mir aber zu einer Fehlermeldung, weil der Ausdruck keinen bool-Wert liefert
    sondern ein bool? (also einen Optional). Das unterstützt Swift nicht.

    Die Optionals sind sehr wichtig. Swift bietet dafür ja sogar die verkürzte Notation mit dem ?.
    Das sollte eigentlich in jedem Swift-Tutorial gut erklärt werden, weil man sonst vieles nicht
    wirklich verstehen kann.


    Bei buttonTapped geht es nicht um die Sprache, sondern um das verwendete Framework.
    Die Verständnisprobleme würden auch in anderen Sprachen auftreten. Swift ist schon recht
    komplex mit seinen Möglichkeiten und selbst wenn ich mich recht intensiv damit beschäftigt
    habe, fehlen mir noch einige Detailkenntnisse. Manche Aspekte habe ch einfach noch nie
    genutzt. Die von Apple erstellten Frameworks, die im wesentlichen ja auch mit anderen Sprachen
    nutzbar sind, sind in ihrem Umfang viel viel größer. Die Einarbeitung in die Frameworks ist
    entsprechend aufwändig und auf der gerade beendeten WWDC wurden wieder neue
    vorgestellt.

    Ich würde mir einfache kompakte Tutorials suchen, die einen Teil der Aspekte abdecken,
    die mich interessieren, und damit experimentieren. Weitere Schritte musst du vermutlich
    oft selbst anhand der Dokumentation erarbeiten. Viele Tipps zu UI sind natürlich verbreitet.
    Ich habe mir den Swift-Kurs von Standford angesehen (iTunes U) und fand den recht gut.
    Es gibt aber auch deutschsprachige Kurse.

    Es gibt jetzt ganz neu SwiftUI (benötigt die Xcode 11 beta, wozu man zumindest registrierter
    Entwickler sein muss). Das wird vermutlich ein neuer Standard für GUI-Entwicklung und ist
    einfacher als der bisherige Ansatz mit dem Interface Builder.
  • Hi und willkommen!

    Ich kann Dir nur auf einen Teil Deiner Fragen eine Antwort (oder besser meine Herangehensweise) nennen ... Du vermischst zwei Aspekte:
    1. Kenntnisse über die verschiedenen Klassen und deren Properties / Methoden (Dein Beispiel mit dem Präsentieren eines ViewControllers): Diese sind von der Programmiersprache unabhängig und hiervon gibt es so viele, dass Du wahrscheinlich nie mit dem Lernen fertig wirst, zumal immer neue hinzu kommen, wenn Apple neue Features unterstützt. Diese Klassen sind thematisch in "Kits" gruppiert, z. B. für ARKit für Augmented Reality oder StoreKit für den App Store. Die grundlegenden heissen AppKit (macOS) bzw. UIKit (iOS) und umfassen die Klassen für Windows und Views, entsprechende Controller, Events etc. Einen Zugang bekommst Du m. E. am besten über das Studium einführender Bücher und (nach-) programmieren deren Beispiele. Später "ahnst" Du, wo es entsprechende Klassen geben müsste und kannst Dich durch Apple's Dokumentation hangeln ... und natürlich Googeln.
    2. Kenntnis über die Syntax und Besonderheiten von Swift, wie z. B. Optionals: Hier bin ich mal auf die Hinweise anderer Forumsteilnehmer gespannt, denn ich habe den Zugang selber noch nicht gefunden. Ich stelle bei Code-Beispielen immer wieder fest, dass ich auf bestimmte Konstrukte nie gekommen wäre und meine Motivation hält sich daher in Grenzen. Trotzdem würde ich den Schritt von Objective-C nach Swift gerne einmal angehen ... wahrscheinlich hilft wie oft nur "einfach machen". Ein Einstieg mag die Swift-Resource-Seite von Apple sein, insbesondere die dort verlinkte "Swift Tour".
    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Ich beschäftige mich seit etwa 2 jahren mit swift. Swift ist eine tolle sprache aber bis jetzt hat leider die objectiveC frameworks für die grafische oberfläche benutzt und die sind sehr komplex und schwierig, wenn man sie nicht aus objectiveC schon seit jahren kennt.

    Ich habe deshalb nur minimal UIkit und ähnliches benutzt.

    Ich empfehle dir deshalb, jetzt dich nur auf die swift-sprache zu konzentrieren und für die bibliotheken zu warten bis september-oktober als man das neue framework swiftUI von apple bekommen wird. Um es zu benutzen, man wird die neue version von macOS, swift und xCode installieren müssen.

    Für swiftUI sind vorallem struct wichtig, denke deshalb du kannst die struct vertiefen und die klassen nicht studieren.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von sergiozh ()

  • @sergiozh, sorry aber Klassen und Strukturen hast Du anscheinend nicht ganz verstanden. Strukturen und Klassen sind eigentlich sehr ähnlich, was man auch Erwarten kann, aber nicht muss (ist nicht nur in Swift so). docs.swift.org/swift-book/Lang…ClassesAndStructures.html

    @marcel_v90 Das man sich zu Beginn etwas schwer tut, dass ist ganz normal. Ich programmiere sehr viel in Ruby, aber wenn ich Rails, ein Web-Framework für Ruby, benützen muss, dann habe ich hier auch keinen Plan. Und die Dokumentation verstehe ich auch nicht. Aber diese ist echt sehr eigen... Da kucke ich auch immer in Guides oder alten Code nach.
  • sergiozh schrieb:

    Ich empfehle dir deshalb, jetzt dich nur auf die swift-sprache zu konzentrieren und für die bibliotheken zu warten bis september-oktober als man das neue framework swiftUI von apple bekommen wird
    Viele haben da so ihre Zweifel, das SwiftUI schon so weit ist, dass es AppKit oder UIKit vollständig ersetzen könnte. Ich bin sicher selbst Apple würde das nicht behaupten. Aktuell kann man mit SwiftUI nur recht standardisierte User Interfaces umsetzen. Versuche mit SwiftUI ein mal „Label“ mit schwarzen Text mit einem rot hervorgehobenen Wort auszugeben.

    Ich bin was SwiftUI betrifft noch skeptisch. Nicht das da wieder das gleiche Passiert, wie mit Swift, wo die aktuelle Version 5 eigentlich erst die Version 1.0 verdient hätte. Alles andere davor war doch realistisch betrachtet 0.x.

    sergiozh schrieb:

    Klassen und strukturen sind ganz ähnlich aber nicht dasselbe. Apple sagt, wenn es geht besser in swift strukturen zu benutzen und ich vermute, dass man mit swiftUI die klassen ganz vergessen kann.
    Na ja, ein Programm besteht nicht nur aus UI.
  • sergiozh schrieb:

    Apple empfiehlt strukturen wo moglich statt klassen zu benutzen und ich denke sie reichen für vieles.
    Jetzt stehe ich auf‘m Schlauch: Alle Apple-Frameworks, die ich kenne, bauen auf Klassen auf. Wie operiert man denn mit diesen in Swift auf Basis von Structures? Und selbst im UI-Umfeld, auf das SwiftUI ja abzielt, instanziert man Klassen als ViewController etc.

    Was habe ich verpasst?

    Verwirrt, Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • sergiozh schrieb:

    Mit swiftUI kann man sicher jetzt nicht alles tun was man mit kitUI kann, aber um mit swift zu beginnen ist sicher genug.
    SwiftUI ist nur zur Gestaltung der GUI gedacht. Also Bedienoberfläche. Es gibt noch jede Menge mehr an Frameworks. Gucks Du Dokumentation. Ein essentielles Framework ist natürlich das Foundation Framework, dass Du sicherlich auch schon verwendet hast.

    Die erste Schritte macht man in Swift am besten mit Playground. GUI, Bedienoberflächen-programmierung, ist eigentlich etwas für später. Aber man sieht halt bissl mehr... Je nachdem, aber den meisten Code schreibt man nicht für die GUI, sondern für Datenmodelle, Verhalten usw.

    sergiozh schrieb:

    Apple empfiehlt strukturen wo moglich statt klassen zu benutzen und ich denke sie reichen für vieles.
    Nachtrag zu vorhin. Klassen und Strukturen gehören zu Swift und man muss beides kennen. Da gibt es kein "man muss sich auf nur eins konzentrieren". Außerdem wenn man eins von beiden verstanden hat, dann versteht man auch das andere. Da gibt es noch mehr Sachen in Swift, die man erst mal verstanden haben muss.

    @MyMattes

    Das wird mit Strukturen und Protokollen gemacht und Protokolle sind sowas wie Mehrfachvererbung. Da wird nicht von einer Basisklasse abgeleitet sondern man sagt, dass diese Struktur folgendes Protokoll (Interface) unterstützt... So kann man sich das vielleicht leichter vorstellen.

    In Swift ist POP angesagt?! - Protocol Oriented Programming - Wie es wohl aussieht.
  • Was ich meinte es ist apple empfiehlt strukturen statt klassen selber zu definieren.

    In der zukunft die neuen swift framework von apple werden alle auf strukturen basieren (meiner meinung nach) und wie swiftUI nur mit swift benutzbar (nicht von objektiveC).

    Array, set und dictionary, string sind auch strukturen in swift:

    developer.apple.com/documentation/swift/array

    developer.apple.com/documentation/swift/set

    developer.apple.com/documentation/swift/dictionary

    developer.apple.com/documentation/swift/string

    Langfristig vermute ich dass alle klassen, die mit NS beginnen, in swift verschwinden werden.

    developer.apple.com/documentation/foundation/nserror

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von sergiozh ()

  • manoh schrieb:

    Je nachdem, aber den meisten Code schreibt man nicht für die GUI, sondern für Datenmodelle, Verhalten usw.
    Meine einzige (private) App hat um Längen mehr Code-Zeilen für UI-Verhalten als für alles andere. Nach etwas durchzappen der SwiftUI-Videos und ersten Spielerei bin ich gespannt, wie es dann mit meiner App aussieht. Ich bin aber zuversichtlich, dass es weniger Code wird. Ich bin sogar zuversichtlich, dass es nun mehr Apps werden, weil SwiftUI genau auf mich zugeschnitten ist.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von helmut72 ()

  • @helmut72

    Ja, das war mir schon klar als ich den Satz geschrieben habe, dass ich damit nicht immer Recht haben werde. Es kommt drauf an.

    @sergiozh

    Für so Typen die nur Daten halten sollen, für diese wird eine Struktur empfohlen (wenn möglich). Somit sind das dann auch Value und keine Reference Types. Das macht man auch in anderen Sprachen so.

    In SwiftUI nutzen die Swift eher als Auszeichnungssprache. Vgl. Package.swift.

    Also ich finde Apfeltutorials zu SwiftUI soweit nicht schlecht. Ist halt direkt von der Quelle und nicht von einer dritten Person. Wobei ich da schon einen Fehler in der internen Xcode Documentation entdeckt habe. Lieber online nutzen.
  • @manoh

    Ich finde auch gut die apple doku aber:

    - ich kann sie normalerweise ganz verstehen nur wenn ich vorher schon andere dingen gelesen habe

    - ist auf englisch und es gelingt mir es gut zu verstehen nur wenn ich das thema schon ein wenig kenne

    - die UIkit doku von apple habe ich nicht verstanden.

    Für die neue swiftUI apple doku sollte man am besten das neue swift 5.1 installiert haben, und ich warte bis es nicht mehr beta ist.
  • Wenn ich einzelne Wörter nicht verstehe, dann nutze ich Look Up (Nachschlagen) unter macOS (rechte Maustaste, Contextmenü) und iOS (länger dranbleiben mit dem Finger). Da gibt's dann eine englische Erklärung und eine deutsche Übersetzung.

    Sätze / Absätze übersetze lasse ich von deepl übersetzen. Alternative Bing oder Google translate.

    Wenn ich's trotzdem nicht verstehe, dann ist es mir meistens egal.

    Wie ich mit Obj-C damals angefangen habe, habe ich mir auch erst mal ein Buch auf Deutsch gekauft. Wenn man das dann mal verstanden hat, dann tut man sich auch leichter mit englischer Literatur diesbezüglich. Und ich mag lieber kurze, prägnante Artikel mit Code-Beispiele, als ein Video anzuschauen.
  • Michael schrieb:

    Viele haben da so ihre Zweifel, das SwiftUI schon so weit ist, dass es AppKit oder UIKit vollständig ersetzen könnte. Ich bin sicher selbst Apple würde das nicht behaupten. Aktuell kann man mit SwiftUI nur recht standardisierte User Interfaces umsetzen. Versuche mit SwiftUI ein mal „Label“ mit schwarzen Text mit einem rot hervorgehobenen Wort auszugeben.
    Genau, aktuell alles nur Standard:
    twitter.com/sajadbeheshti1/status/1142268482920296448

    So richtig langweiliger Standard:
    mobile.twitter.com/Dimillian/status/1142888974203195392

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von helmut72 ()