Sobes.tech
Junior

Wie erfolgt der Zugriff auf Klassenobjekte und Strukturobjekte in Swift?

sobes.tech KI

Antwort von AI

Zu Klassenobjekten — per Referenz; zu Strukturobjekten — per Wert.

Klassen (Referenztyp):

Beim Zuweisen einer Klasseninstanz an eine Variable oder Konstante wird eine Referenz auf diese Instanz zugewiesen. Änderungen, die über eine Referenz vorgenommen werden, wirken sich auf alle Referenzen aus, die auf diese Instanz zeigen.

class MeineKlasse {
    var wert: Int = 0
}

let objekt1 = MeineKlasse() // Instanz erstellen
let objekt2 = objekt1   // objekt2 zeigt jetzt auf dieselbe Instanz
objekt1.wert = 10      // Änderung über objekt1
print(objekt2.wert)    // Gibt 10 aus - Änderung sichtbar über objekt2

Strukturen (Werttyp):

Beim Zuweisen einer Strukturobjekts an eine Variable oder Konstante wird eine Kopie dieser Instanz erstellt. Jede Variable/Konstante enthält ihre eigene unabhängige Kopie der Daten. Änderungen an einer Kopie beeinflussen die anderen nicht.

struct MeineStruktur {
    var wert: Int = 0
}

var struktur1 = MeineStruktur() // Instanz erstellen
var struktur2 = struktur1   // Kopie von struktur1
struktur1.wert = 20          // Änderung über struktur1
print(struktur2.wert)        // Gibt 0 aus - struktur2 bleibt unverändert

Vergleich:

Merkmal Klassen Strukturen
Typ Referenz Wert
Zuweisung Referenz wird kopiert Wert wird kopiert
Änderungen Für alle Referenzen sichtbar Betreffen nur die Kopie
Vererbung Wird unterstützt Wird nicht unterstützt
Identität Kann geprüft werden (===) Keine Konzept der Identität

Die Wahl zwischen Klasse und Struktur hängt von den Anforderungen ab. Strukturen werden häufig für kleine, einfache Datentypen verwendet, die einen Wert repräsentieren (z.B. Point, Size, Range). Klassen werden für komplexere Datentypen genutzt, die Referenzsemantik, Vererbung oder Lebenszyklusverwaltung benötigen (z.B. UIViewController, UIView).