Einleitung
Ein Vorstellungsgespräch für eine Position als iOS/macOS-Entwickler ist nicht nur eine Prüfung der Kenntnisse von Frameworks wie UIKit oder SwiftUI. In erster Linie bewertet der Arbeitgeber Ihr Verständnis der Sprache Swift: ihrer Syntax, Besonderheiten der Speicherverwaltung, Arbeit mit Multithreading und des Typsystems. Selbst wenn Sie selbstbewusst Anwendungen schreiben, können Sie ohne theoretische Grundlagen leicht ein technisches Interview vermasseln.
In diesem Artikel haben wir die Top-Fragen zusammengestellt, die 2025 am häufigsten in Swift-Vorstellungsgesprächen gestellt werden. Jede Frage wird von einer detaillierten Erklärung und einem Codebeispiel begleitet. Das Material wird sowohl für Junioren als auch für erfahrene Entwickler nützlich sein, die ihr Wissen auffrischen möchten.
1. Optionale Typen (Optionals) und Sicherheit
Warum verwendet Swift Optionals?
Swift ist eine Sprache mit strenger Typisierung, und optionale Typen sind ihre Schlüsselfunktion für die sichere Arbeit mit nil. Im Gegensatz zu Objective-C, wo nil einfach ein Nullzeiger ist, ist Optional in Swift eine Aufzählung (enum) mit zwei Fällen: none (nil) und some(Wrapped). Dies zwingt den Entwickler, das Fehlen eines Werts explizit zu behandeln und verhindert Abstürze.
Wie extrahiert man einen Wert aus einem Optional?
Es gibt mehrere Möglichkeiten:
- Force unwrapping — der Operator
!. Wird nur verwendet, wenn Sie absolut sicher sind, dass der Wert nicht nil ist. - Optional binding — die Konstruktion
if letoderguard let. - Nil-coalescing operator —
??zum Festlegen eines Standardwerts.
var name: String? = "Alice"
// Force unwrapping (gefährlich!)print(name!)
// Optional bindingif let unwrappedName = name { print("Hello, \\(unwrappedName)")}
// Nil-coalescinglet displayName = name ?? "Guest"print(displayName)Was sind Implicitly Unwrapped Optionals (IUO)?
Dies ist ein optionaler Typ, der beim Zugriff automatisch entpackt wird. Er wird mit ! nach dem Typ deklariert. Wird hauptsächlich für Eigenschaften verwendet, die nach dem init initialisiert werden (z. B. IBOutlet in UIKit). Im modernen Swift (5.x) verhalten sich IUOs jedoch wie normale Optionals, und der Compiler warnt vor den Risiken.
2. Speicherverwaltung: ARC und starke Referenzzyklen
Wie funktioniert ARC in Swift?
Automatic Reference Counting (ARC) ist ein Mechanismus zur Referenzzählung. Jede Instanz einer Klasse hat einen Referenzzähler. Wenn der Zähler auf Null fällt, wird das Objekt aus dem Speicher entfernt. ARC funktioniert nur mit Reference Types (Klassen, Closures). Value Types (Strukturen, Aufzählungen) werden auf dem Stack gespeichert und durch Kopieren verwaltet.
Was ist ein starker Referenzzyklus (retain cycle)?
Ein Zyklus entsteht, wenn zwei Objekte über starke Referenzen aufeinander verweisen und ARC sie nicht freigeben kann. Dies führt zu einem Speicherleck. Die Lösung ist die Verwendung von schwachen (weak) oder unowned (unowned) Referenzen.
class Person { let name: String var apartment: Apartment? init(name: String) { self.name = name } deinit { print("\\(name) deallocated") }}
class Apartment { let unit: String weak var tenant: Person? // weak — verhindert den Zyklus init(unit: String) { self.unit = unit } deinit { print("Apartment \\(unit) deallocated") }}
var john: Person? = Person(name: "John")var unit4A: Apartment? = Apartment(unit: "4A")
john?.apartment = unit4Aunit4A?.tenant = john
john = nilunit4A = nil// Beide Objekte werden freigegebenWann verwendet man weak und wann unowned?
- weak — immer optional, wird automatisch zu nil, wenn das Objekt freigegeben wird. Wird verwendet, wenn die Lebensdauer der Referenz kürzer sein kann als die des Besitzers.
- unowned — non-optional, geht davon aus, dass das Objekt genauso lange oder länger lebt. Gefährlich: Wenn das Objekt freigegeben wird, führt der Zugriff