So meisterst du das Swift-Vorstellungsgespräch: Top-Fragen
Ein Vorstellungsgespräch für eine iOS-Entwicklerposition ist nicht nur eine Prüfung der Framework-Kenntnisse, sondern auch ein tiefes Verständnis der Sprache Swift. Arbeitgeber möchten einen Kandidaten sehen, der sich mit Speicherverwaltung, Nebenläufigkeit und syntaktischen Besonderheiten auskennt. In diesem Artikel haben wir die Top-Fragen zusammengestellt, die in Vorstellungsgesprächen häufig gestellt werden, mit detaillierten Antworten und Codebeispielen. Der Artikel ist sowohl für Junioren als auch für erfahrene Entwickler nützlich, die ihr Wissen vor einem Interview auffrischen möchten.
1. Swift-Grundlagen: Typen, Optionals und Speicherverwaltung
Basiswissen wird geprüft, um zu sehen, wie gut Sie die grundlegenden Konzepte der Sprache verstehen. Beginnen wir mit dem Beliebtesten – den Optionals.
Frage 1: Was sind Optionals und wozu werden sie benötigt?
Antwort: Optionals sind ein Typsicherheitsmechanismus, der es einer Variablen erlaubt, entweder einen Wert zu enthalten oder nil (kein Wert) zu sein. Sie lösen das Problem von Nullzeigern, das in anderen Sprachen verbreitet ist.
// Deklaration eines Optionalsvar name: String? = "Anna"name = nil // die Variable enthält jetzt keinen Wert
// Sicheres Entpacken (optional binding)if let unwrappedName = name { print("Hallo, \\(unwrappedName)")} else { print("Name fehlt")}
// Erzwungenes Entpacken (force unwrap) — gefährlich!// let forcedName = name! // Absturz, wenn name == nilFrage 2: Was ist der Unterschied zwischen struct und class?
Antwort: struct ist ein Werttyp (value type), während class ein Referenztyp (reference type) ist. Strukturen werden bei der Zuweisung kopiert, Klassen werden als Referenz übergeben. Außerdem unterstützen Klassen Vererbung, Strukturen hingegen nicht.
struct Point { var x: Int var y: Int}
class Person { var name: String init(name: String) { self.name = name }}
var pointA = Point(x: 1, y: 2)var pointB = pointA // KopiepointB.x = 10print(pointA.x) // 1 — das Original hat sich nicht geändert
var personA = Person(name: "Ivan")var personB = personA // Referenz auf dasselbe ObjektpersonB.name = "Peter"print(personA.name) // "Peter" — hat sich geändertFrage 3: Wie funktioniert Automatic Reference Counting (ARC)?
Antwort: ARC zählt automatisch die Anzahl der starken Referenzen auf ein Klassenobjekt. Wenn der Zähler null erreicht, wird das Objekt aus dem Speicher freigegeben. Probleme entstehen bei zyklischen Referenzen (retain cycles), die mit weak oder unowned Referenzen gelöst werden.
class Parent { var child: Child?}
class Child { weak var parent: Parent? // weak verhindert retain cycle}
var parent: Parent? = Parent()var child: Child? = Child()parent?.child = childchild?.parent = parent2. Fortgeschrittene Konzepte: Closures, Protokolle und Generics
Im nächsten Schritt prüft der Interviewer, ob Sie die funktionalen Möglichkeiten von Swift nutzen können.
Frage 4: Was sind Closures und wie fangen sie Werte ein?
Antwort: Ein Closure ist ein Codeblock, der übergeben und wie eine Funktion verwendet werden kann. Es fängt (captures) Variablen aus dem umgebenden Kontext ein. Der Einfang kann stark oder schwach sein.
func makeIncrementer(incrementAmount: Int) -> () -> Int { var total = 0 let incrementer: () -> Int = { total += incrementAmount // Einfang von total return total } return incrementer}
let incrementByTwo = makeIncrementer(incrementAmount: 2)print(incrementByTwo()) // 2print(incrementByTwo()) // 4Frage 5: Was ist der Unterschied zwischen einem Protokoll und einer abstrakten Klasse?
Antwort: In Swift gibt es keine abstrakten Klassen. Ein Protokoll definiert einen Vertrag (Anforderungen), den Klassen, Strukturen oder Enums implementieren müssen.