Struct vs Class in Swift: Wann und warum man eine Struktur wählt

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Struct oder Class? Die ewige Frage des Swift-Entwicklers



Jeder, der anfängt, in Swift zu programmieren, stößt früher oder später auf diese Frage. Auf den ersten Blick ermöglichen beide Konstrukte die Erstellung von Objekten mit Daten und Methoden. Aber warum erhält diese Frage auf Stack Overflow tausende von Aufrufen, und erfahrene Entwickler bevorzugen zunehmend Strukturen?



Die Antwort ist einfach: Weil die Wahl zwischen struct und class direkte Auswirkungen auf die Leistung, die Threadsicherheit und die Architektur Ihrer Anwendung hat. In diesem Artikel werden wir nicht nur die Theorie behandeln, sondern reale Beispiele und Szenarien, in denen Struct eindeutig gegen Class gewinnt.



Wenn Sie in Swift programmieren und immer noch aus Gewohnheit aus Objective-C Klassen verwenden – dieser Artikel ist für Sie. Machen Sie sich bereit, Ihre Ansätze zu überdenken.


Der Hauptunterschied: Value Type vs Reference Type



Bevor wir ins Detail gehen, erinnern wir uns an den grundlegenden Unterschied:



  • Struct ist ein value type (Wertetyp). Bei der Zuweisung oder Übergabe an eine Funktion wird eine Kopie der Daten erstellt.
  • Class ist ein reference type (Referenztyp). Bei der Zuweisung oder Übergabe an eine Funktion wird eine Referenz auf dasselbe Objekt im Speicher übergeben.


Scheint eine Kleinigkeit zu sein. Aber aus diesem „atomaren“ Unterschied ergeben sich alle Konsequenzen, die wir jetzt besprechen werden.



Beispiel 1: Unerwartetes Verhalten von Class



class PersonClass {    var name: String    init(name: String) {        self.name = name    }}

struct PersonStruct { var name: String}

// Testen der Klasselet person1 = PersonClass(name: "Anna")let person2 = person1person2.name = "Maria"

print(person1.name) // Maria! Hat sich auch bei person1 geändertprint(person2.name) // Maria


Haben Sie das Problem bemerkt? Indem wir den Namen von person2 geändert haben, haben wir ihn unbeabsichtigt auch bei person1 geändert. Schließlich handelt es sich um dasselbe Objekt im Speicher. In einem kleinen Beispiel ist das nicht kritisch, aber in einem realen Projekt kann eine solche „Nebenwirkungsänderung“ zu schwer auffindbaren Fehlern führen.



// Testen der Strukturvar person3 = PersonStruct(name: "Anna")var person4 = person3person4.name = "Maria"

print(person3.name) // Anna! Alles an seinem Platzprint(person4.name) // Maria


Die Struktur verhält sich vorhersagbar: Jede Variable besitzt ihre eigene unabhängige Kopie der Daten. Das ist sicher und transparent.



Wann ist Struct die offensichtliche Wahl?



Apple empfiehlt in seiner Dokumentation, standardmäßig struct zu verwenden. Lassen Sie uns die konkreten Szenarien auflisten, in denen die Struktur ohne Alternative gewinnt.



1. Daten, die unveränderlich sein sollen



Wenn Sie mit Modellen arbeiten, die sich nach der Erstellung nicht ändern sollen (z. B. Ergebnisse einer Serverabfrage), ist struct mit konstanten Eigenschaften die ideale Wahl.



struct UserProfile {    let id: Int    let name: String    let email: String}

// Erstellt – und vergessen. Daten sind vor versehentlichen Änderungen geschützt.let profile = UserProfile(id: 1, name: "Ivan", email: "ivan@example.com")


Mit einer Klasse könnten Sie immer noch versehentlich name ändern, wenn die Eigenschaft als var deklariert wäre. Mit einer Struktur zwingt Sie der Compiler, über Unveränderlichkeit nachzudenken.



2. Kleine, in sich geschlossene Entitäten



Wenn Ihr Modell etwas Einfaches beschreibt – Koordinaten, Größen, Farben, Geldbeträge – verwenden Sie struct. Das ist logisch und effizient.



struct Point {    var x: Double    var y: Double}

struct Money { var amount: Double var currency: String}

struct Rectangle { var origin: Point var size: Size}


Solche Typen benötigen keine Vererbung und keine Referenzverwaltung. Sie sind einfach

Blogs

Buchempfehlungen