Swift 5 — Das umfassende Handbuch

swift5

Umfang: 1328 Seiten in extrabreitem Format
ISBN: 978-3-8362-6638-3
Preis: Euro 49,90 (Buchausgabe in D inkl. MWSt.)
Erschienen: Ende April 2019

E-Book-Ausgaben: Nur auf der Rheinwerk-Webseite können Sie wahlweise das E-Book (EUR 49,90) oder die Kombination aus Buch und E-Book bestellen (EUR 54,90).

Leseprobe, Beispieldateien, Errata

Die Leseprobe enthält drei Kapitel (»Operatoren«, »Hello iOS-World!« und »Breakout«) und umfasst mit Vorwort, Inhaltsverzeichnis und Stichwortverzeichnis rund 80 Seiten.

Leseprobe Buch (PDF/SW)    Leseprobe E-Book (PDF/Farbe)

Errata Swift 5

Die Beispieldateien sind wegen Ihrer Größe auf zwei ZIP-Archive verteilt. Das erste Archiv enthält alle Dateien mit Ausnahme der Server-Side-Swift-Projekte mit Vapor. Die befinden sich im zweiten Archiv:

Beispieldateien (ZIP, 100 MB)    Beispieldateien Vapor (ZIP, 380 MB)

Updates

Als Ergänzung zum Buch fassen die folgenden Blog-Artikel einige Neuerungen in Swift bzw. im Swift-Umfeld zusammen:

Kurzbeschreibung

Dieses Buch gibt eine praxisorientierte Einführung in die App-Programmierung mit der Programmiersprache Swift 5.

Das Buch ist in vier Teile gegliedert:

  • Teil I führt in die Grundlagen von Swift ein. Hier lernen Sie alle wichtigen Sprachdetails kennen. Die Themenpalette reicht vom Umgang mit Variablen und elementaren Datentypen bis hin zur Syntax zur objekt- und protokollorientierte Programmierung.

  • Teil II gibt eine Einführung in die Entwicklung von Apps für iOS, macOS und tvOS. Hier erkläre ich Ihnen beispielsweise, wie der Storyboard-Editor funktioniert, wie Sie Ihre Oberfläche mit eigenem Swift-Code verbinden, eigene ViewController-Klassen entwickeln, Tastaturereignisse auswerten oder wie Sie Apps mit mehreren Dialogen/Views organisieren.

  • Teil III fasst wichtige Programmiertechniken in Bausteinform zusammen. In Kurzanleitungen zeige Ihnen unter anderem, wie Sie auf Dateien zugreifen, XML- und JSON-Dokumente auswerten, Webseiten anzeigen, Steuerelemente mit eigener Grafik gestalten, Maus- und Touch-Ereignisse verarbeiten, Drag&Drop unterstützen, Listen und Tabellen in Apps darstellen, geografische Daten auswerten, wie Sie Audio-Dateien, Videos und Fotos abspielen, anzeigen bzw. aufnehmen, wie Sie Code asynchron ausführen wie Sie Spiele mit SpriteKit programmieren. Fortgeschrittene Themen sind iCloud- und Datenbank-Programmierung (Core Data, SQLite) sowie Server Side Swift (Vapor). Sobald Ihre App mit diesen Techniken zufriedenstellen funktioniert, lernen Sie, wie Sie sie tauglich für den App Store machen und dort einreichen. Der Großteil der in Teil III präsentierten Techniken funktioniert plattformübergreifend, also gleichermaßen in iOS-, tvOS- und macOS-Apps.

  • Teil IV zeigt anhand konkreter Beispielprojekte die Praxis der App-Programmierung. Die Apps decken eine ganze Palette von Themen ab, vom praktischen Währungsumrechner über den Icon-Resizer bis hin zu mehreren Spielen.

Zielgruppe/Voraussetzungen Das Buch ist für Einsteiger in die App-Programmierung konzipiert. Sie brauchen weder Vorkenntnisse in Swift noch in Xcode, Cocoa oder Uikit. Ich setze aber voraus, dass Ihnen Grundbegriffe des Programmierens bekannt sind. Ich erkläre Ihnen in diesem Buch also, wie Sie in Swift mit Variablen umgehen, Schleifen programmieren und Klassen entwickeln, aber nicht, was Variablen sind, wozu Schleifen dienen und warum Klassen das Fundament objektorientierter Programmierung sind.

Neu in dieser Auflage

Neu in dieser Auflage sind naturgemäß alle wichtigen Swift-5-Features (siehe auch Neu in Swift 5 im Blog): Dazu zählen unter anderem die ABI-Stabilität, Raw-Zeichenketten, neue Methoden zum Erzeugen von Zufallszahlen, Optional Flatting und der Result-Datentyp. In einem neuen Abschnitt gehe ich auf die Datenbank-Programmierung ein (Core Data, SQLite). Komplett überarbeitet ist das Kapitel zu Server-side Swift (Vapor). In Teil IV gibt es als neue Beispiel-App ein Slider-Puzzlespiel.

Errata und Beispieldateien zur vorigen Auflage

Errata zur Swift-4-Auflage dieses Buchs

25 Gedanken zu „Swift 5 — Das umfassende Handbuch“

  1. Es kommt darauf an was Sie machen möchten. Aktuell geht Swift auf Linux in die Richtung, damit Server-side-Logik für iOS Apps zu machen — und das funktioniert in der Tat schon ziemlich gut. Die eigentliche App-Entwicklung erfolgt unter macOS, erst das Deployment auf Linux.

    In der Neuauflage meines Linux-Buchs stelle ich mit Vapor eines der drei aktuell gängigen Frameworks für derartige Server-Apps vor. (Die Alternativen wären Kitura und Perfect.)

    Als allgemeingültige Programmiersprache hat Swift für Linux aktuell aber wenig Relevanz.

  2. ich weiß, ich weiß … Ich habe mir schon mehrfach vorgenommen, mich in Core Data einzuarbeiten und ein ordentliches Kapitel dazu zu schreiben, aber bisher habe ich es ganz einfach nicht geschafft. Vielleicht in der nächsten Auflage, aber versprechen kann ich es nicht.

    Ich kann nur raten, nach core data swift zu suchen. Zumindest in englischer Sprache gibt es diverse Tuturials, Bücher etc. Sogar deutsche Literatur existiert.

    https://store.raywenderlich.com/products/core-data-by-tutorials

    https://www.ralfebert.de/ios/coredata/

  3. Ähnliches Problem hier: Habe die Printausgabe über Amazon gekauft und würde jetzt gerne das eBook kaufen. Scheint nicht möglich, ohne den vollen Preis zu zahlen :-(

    1. So ist es mir leider auch ergangen – ich kann das Buch zwar noch zurückschicken und das Bundle bestellen, aber irgendwie ist das auch keine tolle Option. Gibt es keine Möglichkeit mit Kaufnachweis des Buchs auf das Bundle zu upgraden?

      1. Ich bin hier die falsche Ansprechperson. Für diese Fragen ist der Verlag zuständig (service@rheinwerk-verlag.de).

        Ich versuche, auf meiner Website so eindeutig wie möglich auf die Kaufoptionen hinzuweisen — mehr liegt nicht in meinem Einfluss.

        Dass das E-Book-Handling derart kompliziert ist, hat mit den rechtlichen Rahmenbedingungen zu tun, die besch*** sind. Rheinwerk hatte in der Vergangenheit wesentlich kundenfreundlichere Angebote, die aus rechtlichen Gründen alle abgedreht werden mussten. Aktuell muss man froh sein, dass es überhaupt ein Bundle-Angebot gibt.

        1. Vielen Dank für die schnelle Antwort, ich werde mich mal an den Verlag wenden, da die eBooks wirklich gut aussehen!

  4. Auf Seite 508 Ihres Swift 5 Buchs beschreiben Sie, wie der Lottozahlengenerator beim Schließen des Fensters automatisch beendet werden kann. Der von Ihnen vorgestellte Code hat jedoch den Nachteil, dass das Programm auch beim Minimieren des Fensters beendet wird.

    Besser ist es deshalb, statt Ihres Codes in der Klasse AppDelegate folgende Methode zu implementieren:
    func applicationShouldTerminateAfterLastWindowClosed(_: NSApplication) -> Bool {
    return true
    }

    Diese Methode funktioniert auch bei einem Programm mit mehreren Fenstern, da das Programm erst nach Schließen des letzten Fensters beendet wird.

  5. Wie up to date ist ihr neues Swift5 Buch (und dessen Beispiel codes) in einer Zeit von SwiftUI?

    VG Tristan

    1. SwiftUI wurde erst nach der Veröffentlichung des Buchs vorgestellt und ist auch aktuell noch im Beta-Stadium. SwiftUI wird daher im Buch nicht behandelt. Ich plane, im Herbst einen Blog-Artikel dazu zu schreiben.

  6. Hallo Herr Kofler,

    ich lese gerade Ihr Swift 5 Buch und denke, dass ich einen Fehler gefunden habe. Auf Seite 70 steht:

    […] Das funktioniert auch bei komplexeren Ausdrücken:

    let (_,  a, (b, c)) = (1,2,("x", "y"))
    // entspricht var a=2; var b="x"; var c="y" [...]"
    
    Richtig wäre 
    // entspricht let a=2; let b="x"; let c="y"
    

    mit let statt var.

    Viele Grüße

  7. Hallo Herr Kofler,

    seit ein paar Tagen lese ich gerade ihr Buch zu SWIFT 5. Ich möchte an dieser Stelle einfach ein Lob ausrichten!
    Das Buch ist sehr gut geschrieben und es macht Spaß, damit die ersten Schritte in die Entwicklung für iOS zu gehen!

    Beste Grüße aus NÖ,

    Manfred

  8. Hallo Herr Kofler,

    vielen Dank erstmal, für das tolle Buch!

    Ich befinde mich zurzeit im Kapitel zu „Popups“ auf Seite 487 und komme leider gerade nicht weiter. Ich versuche das Standardverhalten auf iPhones zu unterbinden, jedoch gibt es die angegebene Variable „popPC“ bei mir nicht. Ist dort eventuell eine Unstimmigkeit im Text? Die Klasse „ViewController2“ ist bei mir das Äquivalent zu Ihrer Klasse „PopViewController“. Vielleicht könnten Sie das kurz kommentieren. Mein Code:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?){
         if let dest = segue.destination as? ViewController2 {
             popPC.delegate = self
         }
    }
    

    Darüber hinaus sind mir bisher folgende Kleinigkeiten aufgefallen (vielleicht sind die mittlerweile auch schon verbessert, oder ich verstehe noch etwas nicht komplett).

    Seite 229:

    let ar = [2, 7, 4, -2, 5] // Daten zum Ausprobieren der Funktion
    let ergebnis = minMax (ar) // (-2, 7)
    ergebnis .min // -2
    ergebnis .max // 7
    let (a, b) = minMax (ar)
    b // 7
    

    Müssten die Ergebnisse hier nicht eigentlich ausgepackt werden damit sie zu den Kommentaren passen? Also:

    ergebnis.min!
    ergebnis.max!
    b!
    

    Seite 261:

    // Init -Funktion , greift auf Computed Properties zurück
    init(_ length : Double , _ width: Double ) {
    self.length = length
    self.width = width
    }
    

    Hier müsste es meiner Meinung nach

    // Init -Funktion , greift auf Computed Properties zurück
    init(_ length : Double , _ width: Double ) {
    self._length = length
    self._width = width
    }
    

    lauten, damit es zu dem Klasseneigenschaften passt (führender Unterstrich).

    Seite 343 (innerhalb des angegebenen Codes):

    let result try db.execute ("SELECT ...")
    

    Hier fehlt ein „=“ zwischen result und try, oder?

    Vielen Dank und viele Grüße!

    1. Vielen Dank für das ausführliche Feedback. Ich habe jetzt nicht unmittelbar Zeit für eine Antwort, aber ich melde mich in den nächsten Tagen.

    2. Zu S. 497: Sie haben recht, der im Buch abgedruckte Code entspricht nicht dem Code der Beispieldatei. Da habe ich vermutlich nach der Aktualisierung des Codes übersehen, die Änderungen auch in den Text zu übernehmen. Die prepare-Methode in ViewController.swift sollte so aussehen:

      // wird ausgeführt, bevor der Info-Popup-Dialog angezeigt wird
        override func prepare(for segue: UIStoryboardSegue,
                              sender: Any?)
        {
          if let dest = segue.destination as? PopupViewController,
             let popPC = dest.popoverPresentationController,
             let btn = sender as? UIButton
          {
            // steuert die erlaubte Richtung des Pfeils
            // popPC.permittedArrowDirections = [.up, .left]
            popPC.permittedArrowDirections = [.up]
            popPC.sourceRect = btn.bounds
            popPC.delegate = self
          }
        }
      

      In solchen Fällen ist es oft am besten, Sie werfen einen Blick in die zum Buch gehörenden Beispielprojekte (Download-Link siehe https://kofler.info/buecher/swift/).

      S. 229: wenn min oder max weiterverarbeitet werden sollen, müssen sie ausgepackt werden bzw. muss eine if-let-Konstruktion gebildet werden. Aber zum Test der Funktion in einem Playground reicht es aus.

      S. 261: Zur Abwechslung kein Fehler von mir :-) self.length ruft den darunter erstellten Computed Property-Code auf, dieser kümmert sich einerseits um die Kontrolle (>0) und andererseits um den Zugriff auf den tatsächlichen Datenspeicher, also _length. Analog für width.

      S. 343: Sie haben recht, gemeint habe ich let result = try db.execute("SELECT ...")

      Nochmals vielen Dank für Ihr Feedback (gerne auch per Mail direkt an mich)! Das hilft, die nächste Auflage besser zu machen.

      1. Hallo Herr Kofler,

        vielen Dank für die schnelle Antwort und die Erläuterungen.
        Alles klar @ Mail!

        Viele Grüße,
        Patrick Klose

  9. Sehr geehrter Herr Kofler,

    auf Seite 144 schreiben Sie:

    „Beachten Sie, dass Sie an die meisten Funktionen Fließkommazahlen übergeben müssen. sqrt(2) funktioniert nicht, es muss sqrt(2.0) heißen.“

    In Apples Language Guide steht, „number literals don’t have an explicit type in and of themselves“:

    sqrt(2) funktioniert also. Vielleicht gab es einmal eine andere Regel, aber das muss wohl vor Swift 4 gewesen sein.

    Viele Grüße Andreas

  10. Sehr geehrter Herr Kofler,

    auf Seite 242 schreiben Sie:

    „Losgelöst von den oben skizzierten Regeln können Sie Elemente, die internal, fileprivate
    oder private sind, durch das Attribut @testable für Test-Targets zugänglichmachen.“

    Meines Wissens hebt @testable nur internal auf. Vielleicht wird sich das mal ändern, aber bis jetzt kann fileprivate und private nicht über @testable zugänglich gemacht werden.

    https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/04-writing_tests.html:
    „@testable provides access only for internal functions; file-private and private declarations are not visible outside of their usual scope when using @testable.“

    Apples Language Guide:
    „However, a unit test target can access any internal entity, if you mark the import declaration for a product module with the @testable attribute […]“

    Viele Grüße Andreas

    1. … Die letzte Formulierung von Apples Language Guide, ohne explizit auf private und fileprivate einzugehen, ist natürlich nicht sehr eindeutig…

  11. Wissen Sie schon, ob und wann eine neue Auflage erscheint mit den Änderungen zu iOS 13 & 14?

    1. Die aktuelle Auflage hat sich leider nicht besonders gut verkauft. Es ist aktuell unklar, ob/wann es eine Neuauflage geben wird.

  12. Hallo Herr Kofler,

    gibt es mittlerweile Klarheit über eine etwaige Neuauflage?

    Viele Grüße
    Volker

  13. Hallo Herr Kofler,

    Falls sie eine Neuauflage heraus bringen, beschreibn sie auch die SwiftUI Programmierung, die ist doch ziemlich anders als bisher.
    Viele Grüsse
    Walter

Kommentare sind geschlossen.