Swift Standardbibliothek (iOS/macOS): vollständiger Überblick
Die Swift Standardbibliothek ist eine grundlegende Sammlung von Typen, Protokollen und Funktionen, die direkt in die Sprache integriert sind. Sie bietet die grundlegende Funktionalität, die für die Entwicklung unter iOS, macOS, watchOS und tvOS erforderlich ist. Im Gegensatz zu Frameworks wie Foundation oder UIKit, die Teil des SDK sind, ist die Swift Standardbibliothek sofort ohne zusätzliche Importe verfügbar. In diesem Artikel werden wir ihre wichtigsten Komponenten, Datenstrukturen, Protokolle und Mechanismen der Speicherverwaltung im Detail analysieren.
Grundlegende Datentypen und Sammlungen
Swift bietet leistungsstarke und typsichere Sammlungen, die für die Leistung optimiert sind.
Arrays (Array)
Eine geordnete Sammlung von Elementen desselben Typs. Unterstützt wahlfreien Zugriff und dynamische Größenänderung.
var numbers: [Int] = [1, 2, 3]numbers.append(4)let first = numbers[0] // 1numbers.sort()Mengen (Set)
Eine ungeordnete Sammlung eindeutiger Elemente. Ideal für Zugehörigkeitsprüfungen und mathematische Operationen.
let setA: Set<Int> = [1, 2, 3, 4]let setB: Set<Int> = [3, 4, 5, 6]let intersection = setA.intersection(setB) // {3, 4}let union = setA.union(setB) // {1, 2, 3, 4, 5, 6}Wörterbücher (Dictionary)
Eine ungeordnete Sammlung von Schlüssel-Wert-Paaren. Schlüssel müssen hashbar sein (Hashable).
var capitals: [String: String] = ["Russland": "Moskau", "USA": "Washington"]capitals["Deutschland"] = "Berlin"if let russiaCapital = capitals["Russland"] { print(russiaCapital) // Moskau}Protokolle: Grundlage der Vielseitigkeit von Swift
Die Swift Standardbibliothek basiert auf Protokollen, die eine gemeinsame Schnittstelle für verschiedene Typen definieren.
- Equatable — ermöglicht den Vergleich von Instanzen mit
==. - Hashable — erforderlich, um den Typ als Wörterbuchschlüssel oder Mengenelement zu verwenden.
- Comparable — ermöglicht die Sortierung von Objekten (<, >, <=, >=).
- Codable — kombiniert Encodable und Decodable zur Serialisierung in JSON, Property List und andere Formate.
- CaseIterable — stellt automatisch eine Sammlung aller Aufzählungswerte bereit.
Beispiel für die Verwendung von Codable
struct User: Codable { let id: Int let name: String let isActive: Bool}
let json = """{ "id": 42, "name": "Ivan", "isActive": true}""".data(using: .utf8)!
let decoder = JSONDecoder()if let user = try? decoder.decode(User.self, from: json) { print(user.name) // Ivan}Speicherverwaltung: ARC und Copy-on-Write
Swift verwendet Automatic Reference Counting (ARC) zur Speicherverwaltung von Referenztypen (Klassen). Für Strukturen und Aufzählungen gilt die Wertkopiersemantik, jedoch mit der Optimierung Copy-on-Write (COW) für Sammlungen.
var array1 = [1, 2, 3]var array2 = array1 // Solange wir nichts ändern — Daten sind gemeinsamarray2.append(4) // Hier erfolgt die tatsächliche Kopie (COW)print(array1.count) // 3 — das ursprüngliche Array hat sich nicht geändertGenerische Vorlagen (Generics)
Generics ermöglichen das Schreiben flexibler und wiederverwendbarer Funktionen und Typen ohne Leistungseinbußen.
func swapTwoValues<T>(_ a: inout T, _ b: inout T) { let temporaryA = a a = b b = temporaryA}
var x = 10var y = 20swapTwoValues(&x, &y) // x = 20, y = 10Optionale Typen (Optionals)
Die sichere Arbeit mit fehlenden Werten ist eine der Schlüsseleigenschaften von Swift. Optionals verhindern Nullpointer-Ausnahmen.
var optionalString: String? = "Hallo"// Optional bindingif let unwrapped = optional