Errata zum Buch »Swift 4 — Das umfassende Handbuch«

Diese Seite enthält Updates und Errata zum Buch »Swift 4 — Das umfassende Handbuch«. Lesen Sie auch diese Blog-Artikel:

S. 36, for-Schleife

Im ersten Absatz steht irrtümlich, dass die Schleife for i in 1..<n die Zahlen bis n durchläuft. Die Schleife läuft aber nur bis n-1! Richtig muss es also heißen:

for i in 1..<n ist der einfachste Weg, um in Swift eine Schleife zu formulieren. Dabei nimmt die Variable i der Reihe nach die Werte 1, 2, 3 bis zum Wert n - 1 an.

S. 117, characters-Eigenschaft

Die im letzten Satz auf dieser Seite erwähnte characters-Eigenschaft zum Durchlaufen der Zeichen einer Zeichenkette ist in Swift 4 nicht mehr erforderlich. (Der nachfolgende Code ist korrekt.)

S. 136, Beispiel für den verschachtelten Aufruf von Funktionen

In der vorletzten Zeile des Codes wird an helpfunc1 irrtümlich zweimal y übergeben. Gedacht war, dass als erster Parameter x und als zweiter Parameter y übergeben wird, also:

return helpfunc1(a: x, b: y) + helpfunc2(e: x, f: y)
                    ^
S. 199, NumberFormatter

Die string(from:)-Methode des NumberFormatter erwartet NSNumber-Daten. Wenn sich die Ausgangsdaten in einer numerische Variablen befinden (Int, Double etc.) gehen Sie wie folgt vor:

let myZahl = 123
let myString = fmt.string(from: NSNumber(value: myZahl))
S. 223, enumerated-Methode

Das Listing am Ende der Seite enthält die Methode enumerate(), richtig ist aber (wie im Text beschrieben) enumerated().

Die Anweisung ar[n] += 1 ist überflüssig. (Ich wollte damit testen, ob das Array innerhalb der Schleife verändert werden kann/darf.)

S. 390, Option ‚Constrains to Margins‘

Meine Beschreibung der Option Constrains to Margins bezieht sich noch auf die Layout Guides, die bis Xcode 8 üblich waren (und die nur bei Projekten, die in Xcode 8 erstellt wurden, weiterhin gelten). Sie wurden in Xcode 9 durch die Safe Area Layout Guides ersetzt (siehe auch S. 432).

Bei Projekten, die mit Xcode 9 erstellt werden, zeigt die Option Constrain to margins keine Wirkung mehr — zumindest nicht für Steuerelemente, die direkt (also in der ersten Ebene) im View Controller platziert werden. Wenn Sie einen Abstand zum Rand (genau genommen zur Safe Area) wünschen, müssen Sie diesen explizit einstellen. Für das Hello-World-Beispiel also z.B. 8 Punkt links und oben. Siehe auch:

Die Option Constrain to margins ist allerdings nicht ganz obsolet. Sie zeigt weiterhin Wirkung, wenn Steuerelemente ineinander verschachtelt werden, wenn Sie also z.B. einen UIButton in eine eigene UIView platzieren. In diesem Fall können weiterhin Margins berücksichtigt werden.

S. 468, erstes Listing

In der 12. Zeile des Listings muss wie folgt lauten (also sourceViewController -> source):

if let src = segue.source as? ...

In den Beispieldateien zum Buch ist der Code korrekt.

S. 634, erstes Listing

Die Variable cell enthält kein Optional, daher muss der weitere Zugriff in der Form cell ohne nachgestelltes Rufezeichen erfolgen. (Der Code ist nur im Buch falsch abgedruckt, die betreffende Beispieldatei ist korrekt.)

// Eigenschaften der Zelle einstellen und zurückgeben
cell.textLabel!.text = mydata[indexPath.row]  // nicht cell!...
return cell                                   // nicht cell!
S. 986, Kapitel 33 — Server-side Swift (Vapor)

Vapor 3 ist fertig, hat aber leider nur mehr entfernte Ähnlichkeiten zu der im Buch beschriebenen Version 2. Ich habe einen recht umfangreichen Blog-Artikel dazu geschrieben. Die Beispielprogramme für das Kapitel müsste ich komplett neu entwickeln, wozu ich aktuell aber leider keine Zeit finde.


Letzte Änderung 14.6.2018. Vielen Dank an alle Leser, die mir Feedback geben!