Einleitung: Warum Swift der Schlüssel zu einem erfolgreichen Vorstellungsgespräch ist
Ein Vorstellungsgespräch zu Swift ist nicht nur eine Überprüfung der Syntax. Das Apple-Ökosystem erfordert ein Verständnis der grundlegenden Sprachprinzipien, der Speicherverwaltung und moderner Frameworks. In diesem Artikel analysieren wir die Top-Fragen, die dir auf jedem Niveau gestellt werden – vom Junior bis zum Senior. Du erfährst nicht nur die richtigen Antworten, sondern auch typische Fallstricke, in die Kandidaten tappen.
Der Artikel wurde für das Bildungsportal PythonLib geschrieben, aber an Swift angepasst. Wir haben das Material so strukturiert, dass du vor dem Interview schnell die wichtigsten Themen wiederholen kannst.
1. Swift-Grundlagen: Optional, Value vs Reference Types
Was ist ein Optional und wozu wird es benötigt?
Ein Optional ist eine Aufzählung (enum), die entweder .none (nil) oder .some(Wrapped) sein kann. Es ist Swifts Möglichkeit, sicher mit dem Fehlen eines Wertes umzugehen.
var name: String? = "Alice"var age: Int? = nil
// Sicheres Entpackenif let unwrappedName = name { print("Hallo, \\(unwrappedName)")} else { print("Name ist nil")}Typischer Fehler: Verwendung von Force Unwrap (!) ohne Überprüfung. Bevorzuge immer guard let oder if let.
Value Types vs Reference Types
Swift unterscheidet streng zwischen Typen:
- Value Types (Strukturen, Aufzählungen, Basistypen) – werden bei der Zuweisung kopiert.
- Reference Types (Klassen) – werden als Referenz übergeben.
struct Point { var x: Int var y: Int}
class Car { var model: String init(model: String) { self.model = model }}
var point1 = Point(x: 1, y: 2)var point2 = point1point2.x = 5 // point1.x bleibt 1
var car1 = Car(model: "Tesla")var car2 = car1car2.model = "BMW" // car1.model wird ebenfalls "BMW"Frage im Vorstellungsgespräch: "Warum empfiehlt Apple, Strukturen anstelle von Klassen zu verwenden?" Antwort: Thread-Sicherheit, Vorhersagbarkeit, kein ARC-Overhead.
2. Memory Management und ARC: Wie man Speicherlecks vermeidet
Wie funktioniert Automatic Reference Counting (ARC)?
ARC zählt automatisch die Referenzen auf Klassenobjekte. Wenn der Zähler Null erreicht, wird der Speicher freigegeben. Probleme treten bei zirkulären Referenzen auf.
class Person { let name: String var apartment: Apartment? init(name: String) { self.name = name } deinit { print("\\(name) freigegeben") }}
class Apartment { let unit: String weak var tenant: Person? // weak – schwache Referenz init(unit: String) { self.unit = unit } deinit { print("Apartment \\(unit) freigegeben") }}
var john: Person? = Person(name: "John")var unit4A: Apartment? = Apartment(unit: "4A")john?.apartment = unit4Aunit4A?.tenant = johnjohn = nilunit4A = nil// Beide Objekte werden freigegebenWichtige Modifikatoren:
weak– immer optional, wird bei Freigabe automatisch nil.unowned– nicht optional, setzt voraus, dass das Objekt lebt (Absturzrisiko).
Typische Frage: "Was ist der Unterschied zwischen weak und unowned?" Antwort: weak ist sicherer, unowned ist praktischer für zwingende Abhängigkeiten (z. B. Delegat).
3. Frameworks: UIKit vs SwiftUI, GCD und Protokolle
UIKit: Lebenszyklus des ViewController und Delegate Pattern
Das Verständnis von viewDidLoad, viewWillAppear, viewDidDisappear ist die Basis. Aber im Vorstellungsgespräch wird oft nach dem Delegate Pattern gefragt:
protocol MyDelegate: AnyObject { func didTapButton()}
class MyView: UIView { weak var delegate: MyDelegate? @objc func buttonTapped() { delegate?.didTapButton() }}
class MyViewControlle