Wie unterscheidet man referenzbasierte Datentypen von Datentypen, die Werte direkt speichern?
sobes.tech KI
Antwort von AI
In iOS (Swift und Objective-C) werden Datentypen in Wertetypen (value types) und Referenztypen (reference types) unterteilt.
-
Wertetypen speichern die Daten direkt. Beim Zuweisen oder Übergabe an eine Funktion wird eine Kopie der Daten erstellt. In Swift gehören dazu Strukturen (
struct), Aufzählungen (enum) sowie Basistypen wieInt,Double,Bool. -
Referenztypen speichern eine Referenz auf einen Speicherbereich, in dem die Daten liegen. Beim Zuweisen wird die Referenz kopiert, nicht die Daten selbst. Änderungen über eine Referenz sind in anderen sichtbar. In Swift sind das Klassen (
class).
So erkennt man sie:
- In Swift ist ein Typ, der als
structoderenumdeklariert ist, ein Wertetyp. - Ist er als
classdeklariert, ist es ein Referenztyp.
Beispiel:
struct Point {
var x: Int
var y: Int
}
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var p1 = Point(x: 0, y: 0)
var p2 = p1
p2.x = 10
print(p1.x) // 0 - die Kopie hat sich nicht geändert
var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"
print(person1.name) // Bob - beide Variablen verweisen auf dasselbe Objekt
Auf diese Weise kann man anhand des Verhaltens bei Zuweisung und Änderung die auf Referenzen basierenden Typen von den direkt Wert speichernden Typen unterscheiden.