Kurz: - The Swift Programming Language (docs.swift.org, kostenlos), swift.org, hackingwithswift.com - Apples Tutorials Develop in Swift und SwiftUI-Tutorials; Stanford-Kurs CS193p - Übungen.
Teil des Kurses Swift
Syntax im Überblick
let konstante = 1 var variable: Int = 2 let (a, b) = (1, 2)
func f(label param: Int = 0) -> Int { return param } f(label: 3)
if cond { } else if { } else { } guard cond else { return } switch x { case 1, 2: ...; default: ... }
for i in 0..<n { } for (i, x) in arr.enumerated() { } while c { } repeat { } while c
let o: Int? = nil if let v = o { } o ?? 0 o?.description o!
struct S { var a = 0; mutating func m() { } } class C: Basis { override func f() { } }
enum E { case a, b(Int) } protocol P { func f() } extension T: P { }
func g<T: Comparable>(_ x: T) { } enum Err: Error { case x } func h() throws { } do { try h() } catch { }Standardbibliothek
| Gebiet | Wichtige Namen |
|---|---|
| Zahlen | abs min max pow sqrt round floor ceil isMultiple(of:) (Foundation) |
| Strings | count uppercased lowercased hasPrefix contains split joined replacingOccurrences trimmingCharacters |
| Array | append insert remove sort sorted map filter reduce first last contains firstIndex joined |
| Dictionary | [k], [k, default:], keys, values, mapValues, Dictionary(grouping:by:) |
| Set | insert contains union intersection subtracting |
| Fehler | throw try try? try! do catch Result defer |
| Nebenläufigkeit | async await Task actor TaskGroup async let |
| Daten | Codable JSONEncoder JSONDecoder Data Date URL FileManager |
Swift im Vergleich
| Thema | Swift |
|---|---|
| null | gibt es nicht: Optional (T?) |
| Fehler | throws/try, keine Exceptions im Java-Sinn |
| Speicher | ARC, kein Garbage Collector |
| Typen | statisch, stark, mit Inferenz |
| Werte vs. Referenzen | struct/enum sind Werte, class Referenzen |
| Strings | Unicode-korrekt; Indizierung über String.Index statt Ganzzahl |
Häufige Fehler
| Meldung / Problem | Ursache |
|---|---|
Value of optional type must be unwrapped | Optional nicht ausgepackt: if let, ?? |
Fatal error: Unexpectedly found nil | ! auf nil: Optional-Chaining nutzen |
Cannot assign to value: 'x' is a 'let' constant | let statt var |
Binary operator '+' cannot be applied to 'Int' and 'Double' | Typen explizit umwandeln: Double(i) |
Switch must be exhaustive | fehlende Fälle oder default ergänzen |
Cannot use mutating member on immutable value | Variable mit var deklarieren |
Cannot find 'sqrt' in scope | import Foundation fehlt |
String index is out of bounds / kein s[0] | Strings über s.index(...) oder Array(s) ansprechen |
| Retain Cycle / Speicherleck | [weak self] in Closures, weak für Rückverweise |
Weiterlernen
- The Swift Programming Language (docs.swift.org, kostenlos), swift.org, hackingwithswift.com
- Apples Tutorials Develop in Swift und SwiftUI-Tutorials; Stanford-Kurs CS193p
- Übungen: Exercism (Swift-Track), Advent of Code in Swift
- Wiki dieser Seite: Artikel zu mobilen Apps und Programmierparadigmen
Merke
- Optionals, Werttypen und Protokolle machen Swift-Code sicher und ausdrucksstark
structbevorzugen,guardfür frühe Ausstiege,if letzum Auspackenasync/awaitundactorfür Nebenläufigkeit, SwiftUI für Oberflächen
Quiz zur Selbstkontrolle
Wofür steht guard?
- Früher Ausstieg bei nicht erfüllter Bedingung (richtig)
- Eine Schleife
- Ein Zugriffsschutz
- Ein Fehlertyp
Wofür steht ??
- Standardwert, wenn ein Optional nil ist (richtig)
- Eine Frage
- Zwei Optionals vergleichen
- Kommentar
Wie nennt man automatische Speicherverwaltung in Swift?
- ARC (Automatic Reference Counting) (richtig)
- Garbage Collector
- malloc
- RAII in C++
Weiter im Kurs
Zurück: Projekte: Praxisbeispiele
Alle Kapitel: Swift im Überblick