Table of Contents
Was ist SwiftUI?
SwiftUI ist Apples deklaratives Framework für die Erstellung von Benutzeroberflächen auf allen Apple-Plattformen – iOS, iPadOS, macOS, watchOS und tvOS. Eingeführt im Jahr 2019 ersetzt es den zwingenden Ansatz von UIKit (bei dem Sie manuell verwaltete Ansichtsupdates) durch eine einfache, zustandsgesteuerte Syntax. In SwiftUI beschreiben Sie, wie Ihre Benutzeroberfläche aussehen und wie sie sich verhalten soll, und das Framework behandelt automatisch den Rest. Dies führt zu sauberem Code, weniger Fehlern und schnelleren Entwicklungszyklen.
Für neue iOS-Entwickler ist SwiftUI der beste Ausgangspunkt. Es reduziert drastisch die Menge an Code, die zum Erstellen interaktiver Apps benötigt wird, und integriert sich nahtlos in die Live-Vorschaufunktion von Xcode, sodass Sie sofort Änderungen sehen. Apple investiert weiterhin stark in SwiftUI und fügt mit jeder Version neue Steuerelemente, Layouts und Funktionen hinzu. Indem Sie SwiftUI zuerst lernen, bauen Sie eine Grundlage auf, die für die kommenden Jahre relevant bleibt.
Warum SwiftUI über UIKit wählen?
Während UIKit für bestimmte fortgeschrittene Szenarien leistungsstark und notwendig bleibt, bietet SwiftUI für Anfänger und erfahrene Entwickler mehrere Vorteile:
- Weniger Boilerplate Code: Eine einfache “Hello, World”-App in UIKit erfordert ein Storyboard oder mehrere Codezeilen.
- Live Preview: Mit Xcodes Canvas können Sie Ihr UI-Update in Echtzeit beim Bearbeiten von Code sehen, was eine schnelle Iteration ohne Neukompilierung ermöglicht.
- Zustandsgesteuerte Benutzeroberfläche: SwiftUI gerendert automatisch Ansichten neu, wenn sich die zugrunde liegenden Daten ändern, wodurch die in UIKit benötigte manuelle Synchronisationslogik eliminiert wird.
- Plattformübergreifende Konsistenz: Schreiben Sie Ihre Ansichten einmalig und sie funktionieren auf iPhone, iPad, Mac, Apple Watch und Apple TV mit minimalen plattformspezifischen Anpassungen.
- Moderne Swift-Funktionen: SwiftUI nutzt Swifts fortschrittliches Typsystem, Eigenschafts-Wrapper und Ergebnis-Builder, um ausdrucksstarken und sicheren Code zu erstellen.
Das heißt, UIKit ist nicht irrelevant. Für komplexe Animationen, Low-Level-Zeichnung oder Interoperabilität mit älterem Code benötigen Sie möglicherweise noch UIKit. Aber als Anfänger können Sie mit der Fokussierung auf SwiftUI echte Apps schneller erstellen. Apples eigene SwiftUI-Dokumentation ist die maßgebliche Referenz.
Erste Schritte mit SwiftUI
Um zu beginnen, benötigen Sie einen Mac mit Xcode 14 oder höher (Xcode 15+ wird für die neuesten SwiftUI-Funktionen empfohlen). Xcode aus dem Mac App Store oder der Apple Developer-Website herunterladen.
- Öffnen Sie Xcode und wählen Sie Erstellen Sie ein neues Xcode-Projekt.
- Wählen Sie iOS als Plattform und wählen Sie dann die App Vorlage.
- Stellen Sie die Schnittstelle auf SwiftUI und die Sprache auf Swift ein.
- Benennen Sie Ihr Projekt und speichern Sie es an Ihrem gewünschten Standort.
Xcode generiert eine Standarddatei mit einer einfachen Ansicht, die “Hallo, Welt!” anzeigt. Neben dem Code-Editor sehen Sie eine Vorschau-Canvas. Wenn die Canvas ausgeblendet ist, klicken Sie auf das Editor Menü und wählen Sie Canvas. Diese Live-Vorschau ist Ihr bester Freund - jede Änderung, die Sie am Code vornehmen, erscheint sofort.
Die Anatomie einer SwiftUI-Ansicht
Jede Ansicht in SwiftUI entspricht dem -Protokoll und implementiert eine einzige erforderliche berechnete Eigenschaft: . Die -Eigenschaft beschreibt den Inhalt und das Layout der Ansicht.
import SwiftUI
struct ContentView: View {
var body: some View {
Text("Hello, SwiftUI!")
}
}
Der Rückgabetyp ist ein undurchsichtiger Typ – er sagt dem Compiler, dass der Körper einen konkreten Typ zurückgibt, der entspricht, aber Sie müssen nicht genau angeben, welcher.
Sie können mehrere Ansichten mit Layout-Containern wie , und erstellen.
struct ContentView: View {
var body: some View {
VStack {
Text("Welcome")
.font(.largeTitle)
Text("Start building with SwiftUI")
.foregroundColor(.secondary)
}
.padding()
}
}
Hier ordnet der seine Kinder vertikal an und der -Modifikator fügt Raum um den gesamten Stapel hinzu.
Views und Modifiers – Die Kernbausteine
SwiftUI bietet eine reichhaltige Bibliothek von eingebauten Ansichten wie , , , , und mehr. Jede Ansicht kann mit Modifikatoren angepasst werden – Methoden, die eine neue Version der Ansicht mit der angewendeten Modifikation zurückgeben.
- – setzt den Schriftstil fest
- – ändert die Textfarbe
- – fügt Standard-Pading um die Ansicht hinzu
- – füllt den Hintergrund mit einer Farbe
- – rundet die Ecken einer Form oder eines Bildes ab
- – fügt einen Tropfenschatten hinzu
Modifikatoren können in beliebiger Reihenfolge angewendet werden, aber die Reihenfolge ist wichtig, weil jeder Modifikator die vorherige Ansicht umschließt. Zum Beispiel polstert zuerst den Inhalt und malt dann den Hintergrund, was zu einem roten Rechteck um den gepolsterten Bereich führt.
Layout Container – VStack, HStack, ZStack
SwiftUI verwendet drei primäre Stapelcontainer, um Ansichten anzuordnen:
- VStack – ordnet Kinder vertikal an (von oben nach unten)
- HStack – ordnet Kinder horizontal an (links nach rechts)
- ZStack – überlagert Kinder übereinander (Tiefenordnung)
Sie können Stapel beliebig verschachteln, um komplexe Layouts zu erstellen. Jeder Stapel unterstützt auch und Parameter.
VStack(alignment: .leading, spacing: 20) {
Text("Top")
HStack {
Text("Left")
Text("Right")
}
ZStack {
Color.blue
Text("Overlay")
.foregroundColor(.white)
}
.frame(height: 100)
}
Dies erzeugt einen vertikalen Stapel mit führender Ausrichtung, der einen Titel, ein horizontales Paar und ein blaues Rechteck mit weißem Text enthält, der oben zentriert ist.
Staatsmanagement in SwiftUI
Eine der leistungsstärksten Funktionen von SwiftUI ist die Handhabung dynamischer Daten. Anstatt die Benutzeroberfläche bei Datenänderungen manuell zu aktualisieren, deklarieren Sie die Daten als state und SwiftUI gerendert die betroffenen Ansichten automatisch neu. Dies beseitigt eine ganze Klasse von Fehlern, die mit der UI-Synchronisation zusammenhängen.
SwiftUI bietet mehrere Eigenschafts-Wrapper für den Verwaltungszustand an, die jeweils für verschiedene Szenarien geeignet sind:
Verwenden von @State für den lokalen Staat
wird für einfache Werte verwendet, die ausschließlich zu einer einzelnen Ansicht gehören, wie z. B. der Ein/Aus-Zustand eines Umschalters oder die Eingabe eines Textfelds.
struct ToggleExample: View {
@State private var isOn = false
var body: some View {
Toggle("Enable Notifications", isOn: $isOn)
.padding()
}
}
Beachten Sie das Präfix – es erzeugt eine ] Bindung für den Zustand, so dass das den Wert lesen und schreiben kann.
@Binding für Passing State Down
Wenn eine Child View den Status eines Elternteils ändern muss, verwenden Sie Das Kind erhält eine Bindung an den Wert und kann ihn ändern, und die View des Elternteils wird automatisch aktualisiert.
struct ParentView: View {
@State private var showSheet = false
var body: some View {
ChildView(showSheet: $showSheet)
}
}
struct ChildView: View {
@Binding var showSheet: Bool
var body: some View {
Button("Toggle Sheet") {
showSheet.toggle()
}
}
}
Bindungen sind der Klebstoff, der Ansichten in einer Hierarchie verbindet, ohne komplexe Delegations- oder Rückrufmuster einzuführen.
Observable Objects und @StateObject
Für komplexere Datenmodelle, die über mehrere Ansichten hinweg geteilt werden, erstellen Sie eine Klasse, die entspricht. Innerhalb der Klasse markieren Sie Eigenschaften mit , damit Änderungen die Triggeransicht aktualisieren.
class UserSettings: ObservableObject {
@Published var username = "Guest"
}
struct SettingsView: View {
@StateObject private var settings = UserSettings()
var body: some View {
VStack {
Text("Hello, \(settings.username)")
TextField("Username", text: $settings.username)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
}
}
}
Wenn das Objekt an anderer Stelle erstellt wird, verwenden Sie , um es zu beobachten, ohne Eigentümer zu werden.
@EnvironmentObject für Shared State
Wenn Sie dasselbe beobachtbare Objekt in viele Ansichten einfügen müssen, ohne es durch jeden Initialisierer zu übergeben, verwenden Sie . Zuerst erstellen Sie das Objekt in einer übergeordneten Ansicht (z. B. dem App-Eingabepunkt) und injizieren es mit dem -Modifikator. Jede absteigende Ansicht kann dann darauf zugreifen, indem Sie eine Eigenschaft mit deklarieren. Dies ist besonders nützlich für app-weite Daten wie Benutzerauthentifizierung oder Einstellungen.
@main
struct MyApp: App {
@StateObject private var settings = UserSettings()
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(settings)
}
}
}
struct DetailView: View {
@EnvironmentObject var settings: UserSettings
var body: some View {
Text(settings.username)
}
}
Für einen tieferen Einblick in das staatliche Management ist die Apple-Dokumentation zur Verwaltung des UI-Staates eine ausgezeichnete Ressource.
Erstellen Sie Ihre erste SwiftUI App - eine Notiz App
Lassen Sie uns das Gelernte anwenden, indem Sie eine einfache Notiz-App erstellen. Die App zeigt eine Liste von Notizen an, ermöglicht es dem Benutzer, neue hinzuzufügen, und zeigt Details an, wenn eine Notiz angetippt wird.
Einrichtung des Datenmodells
Erstellen Sie eine neue Swift-Datei mit dem Namen und definieren Sie ein Modell:
import Foundation
struct Note: Identifiable {
let id = UUID()
var title: String
var content: String
}
Das -Protokoll erfordert eine -Eigenschaft, die SwiftUI verwendet, um Elemente in einer Liste zu unterscheiden.
Erstellen der Listenansicht
Verwenden Sie in , um ein Array von Notizen zu halten, und ein , um sie anzuzeigen.
struct ContentView: View {
@State private var notes = [
Note(title: "Hello", content: "This is my first note.")
]
var body: some View {
NavigationStack {
List {
ForEach(notes) { note in
NavigationLink(destination: NoteDetailView(note: note)) {
Text(note.title)
}
}
.onDelete(perform: removeNote)
}
.navigationTitle("Notes")
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Button(action: addNote) {
Image(systemName: "plus")
}
}
}
}
}
private func addNote() {
notes.append(Note(title: "New Note", content: ""))
}
private func removeNote(at offsets: IndexSet) {
notes.remove(atOffsets: offsets)
}
}
Beachten Sie die Verwendung von (iOS 16+) für die Navigation und , um eine Detailansicht zu drücken.
Hinzufügen von Navigation und Detailansicht
Erstelle eine neue Datei , die eine benötigt und die Bearbeitung ermöglicht. Aus Gründen der Kürze zeigen wir den Titel und den Inhalt im schreibgeschützten Modus an. Du kannst sie später mit -Bindungen erweitern, um die Bearbeitung zu ermöglichen.
struct NoteDetailView: View {
let note: Note
var body: some View {
VStack(alignment: .leading, spacing: 16) {
Text(note.title)
.font(.title)
Text(note.content)
.font(.body)
.foregroundColor(.secondary)
Spacer()
}
.padding()
.navigationTitle("Note")
}
}
Führen Sie die App im Simulator oder in der Vorschau aus. Sie sehen eine Liste von Notizen, Sie können neue hinzufügen, tippen, um Details anzuzeigen, und wischen, um sie zu löschen. Diese Basis-App zeigt Liste, NavigationStack, Status und Datenfluss - alle wichtigen SwiftUI-Muster.
Debugging und Previews
Die Vorschau-Canvas von SwiftUI ist Ihr Haupt-Debugging-Tool. Wenn eine Ansicht nicht richtig aussieht, inspizieren Sie die Modifikatorkette und stellen Sie sicher, dass Sie den richtigen Layout-Container verwenden.
- Fehlende verursacht Ansichten, um Kanten zu berühren.
- Falsche Reihenfolge der Modifikatoren (z. B. Hintergrund vor dem Padding).
- Verwenden von ohne Initialisierung des Objekts.
Sie können auch -Anweisungen in Ihrem oder in Schaltflächen hinzufügen, um Zustandsänderungen zu überprüfen.
Eine weitere leistungsstarke Technik ist die Verwendung von , um zu sehen, wie Ihre Benutzeroberfläche auf verschiedenen Gerätegrößen aussieht.
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
Group {
ContentView()
.previewDevice("iPhone 15 Pro")
ContentView()
.previewDevice("iPhone SE (3rd generation)")
}
}
}
Performance und Best Practices
SwiftUI wurde entwickelt, um effizient zu sein, aber es gibt Praktiken, um Ihre Apps reibungslos laufen zu lassen:
- Verwenden Sie identifizierbare Modelle für Listen, um SwiftUI zu helfen, nur geänderte Zeilen zu diffen und zu aktualisieren.
- Halten Sie Ansichten klein – unterteilen Sie große Ansichten in kleinere, wiederverwendbare Komponenten. Dies verbessert die Lesbarkeit und lässt die inkrementellen Updates von SwiftUI granularer arbeiten.
- Vermeide teure Berechnungen in – führe schwere Arbeit in Ansichtsmodellen oder mit Eigenschaften durch. SwiftUI bewertet bei jeder Zustandsänderung neu, also halte es schnell.
- Bevorzugen für view-local data und verschieben Sie komplexe Geschäftslogik zu beobachtbaren Objekten.
- Verwenden Sie oder , um unnötige Wiedergaben zu verhindern, wenn sich die Eingaben der Ansicht nicht geändert haben.
- Profil mit Instrumenten – Xcodes SwiftUI Vorlage in Instrumenten hilft, Updates der Ansicht zu identifizieren und Engpässe zu rendern.
Für eine gründliche Durchsicht der SwiftUI-Leistung, schauen Sie sich diese Guide von Swift mit Majid.
Nächste Schritte und Ressourcen
Sie haben jetzt eine solide Grundlage in SwiftUI. Um weiter zu lernen und fortschrittlichere Apps zu erstellen:
- Erkunde Apples offizielle Tutorials – Die SwiftUI Tutorials von Apple führen dich Schritt für Schritt durch den Aufbau einer kompletten App.
- Read Hacking with Swift – Paul Hudsons 100 Days of SwiftUI ist ein kostenloser, umfassender Kurs.
- Tauchen Sie in reaktive Muster – Lernen Sie das reaktive Framework von Apple, um asynchrone Datenströme und komplexe Datenpipelines zu verarbeiten.
- Erstelle ein echtes Projekt – Wählen Sie ein einfaches App-Konzept (Wetter, To-Do-Liste, Habit-Tracker) und implementieren Sie es von Grund auf neu.
- Treten Sie der Community bei – Die Swift-Foren, Apple Developer Foren und das subreddit r/SwiftUI sind großartige Orte, um Fragen zu stellen und Ihre Arbeit zu teilen.
Schlussfolgerung
SwiftUI stellt einen Paradigmenwechsel in der Apple-Plattformentwicklung dar. Seine deklarative Syntax, automatische, zustandsgesteuerte Updates und die Live-Vorschau machen es zum idealen Framework für neue iOS-Entwickler, um schnell mit dem Erstellen funktionaler, schöner Apps zu beginnen. Durch das Verständnis von Ansichten, Modifikatoren, Layout-Containern und Zustandsverwaltung können Sie dynamische Schnittstellen mit weniger Code und weniger Fehlern erstellen.
Experimentiere weiter – ändere die Beispiele in diesem Handbuch, brich sie und behebe sie. Jede Iteration stärkt dein Verständnis. Wenn du wächst, wirst du entdecken, wie SwiftUI sich mit anderen Apple-Frameworks wie Core Data, CloudKit und Swift Charts integriert. Die Fähigkeiten, die du hier entwickelst, werden dir auf allen Apple-Plattformen gut dienen.