Intern
Was sind Datentypen und welche gibt es?
sobes.tech KI
Antwort von AI
Datentypen definieren den Satz möglicher Werte und Operationen, die auf ihnen ausgeführt werden können. In Swift werden sie in Werttypen und Referenztypen unterteilt.
Werttypen:
- Werte werden beim Zuweisen oder Übergeben an eine Funktion kopiert.
- Jede Variable oder Konstante speichert eine eigene unabhängige Kopie der Daten.
- Änderungen an einer Kopie beeinflussen die anderen nicht.
Beispiele für Werttypen:
- Strukturen (
struct) - Aufzählungen (
enum) - Tupel (
tuple) - Grundtypen:
Int,Double,Bool,String, Arrays (Array), Wörterbücher (Dictionary), Mengen (Set).
// Beispiel Werttyp: struct
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 erhält eine Kopie von p1
p2.x = 10 // Änderung an p2 beeinflusst p1 nicht
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)
Referenztypen:
- Werte werden nicht kopiert. Beim Zuweisen oder Übergeben
- wird eine Referenz auf dasselbe Datenexemplar im Speicher übertragen.
- Mehrere Variablen oder Konstanten können auf dasselbe Exemplar verweisen.
- Änderungen über eine Referenz sind in allen anderen sichtbar.
Beispiele für Referenztypen:
- Klassen (
class) - Funktionen (
func) - Closures (
closure)
// Beispiel Referenztyp: class
class Circle {
var radius: Double
init(radius: Double) {
self.radius = radius
}
}
var c1 = Circle(radius: 5.0)
var c2 = c1 // c2 verweist auf dasselbe Exemplar wie c1
c2.radius = 10.0 // Änderung an c2 wirkt sich auf c1 aus
print("c1 radius: \(c1.radius)") // c1 radius: 10.0
print("c2 radius: \(c2.radius)") // c2 radius: 10.0
Tabelle der Haupttypen:
| Kategorie | Typ(e) | Wert-/Referenztyp | Beschreibung |
|---|---|---|---|
| Ganzzahlen | Int, UInt, Int8, UInt8 usw. |
Wert | Ganze Zahlen unterschiedlicher Größe, mit oder ohne Vorzeichen |
| Fließkommazahlen | Float, Double |
Wert | Zahlen mit Dezimalanteil |
| Boolesche Werte | Bool |
Wert | Logische Werte (true oder false) |
| Strings | String |
Wert | Folge von Zeichen |
| Sammlungen | Array, Dictionary, Set |
Wert | Geordnete/nicht geordnete Sammlungen gleichartiger Elemente |
| Strukturen | struct |
Wert | Benutzerdefinierte zusammengesetzte Typen, die zusammenhängende Werte speichern |
| Aufzählungen | enum |
Wert | Definieren einen gemeinsamen Typ für eine Gruppe verwandter Werte |
| Tupel | (value1, value2, ...) |
Wert | Gruppieren mehrere Werte in einen einzigen zusammengesetzten Typ |
| Klassen | class |
Referenz | Benutzerdefinierte zusammengesetzte Typen, die Vererbung und Referenzverhalten unterstützen |
| Funktionen | () -> Void, (Int) -> String usw. |
Referenz | Ausführbare Codeblöcke |
| Closures | { (parameters) -> return type in code } |
Referenz | Selbstständige Codeblöcke, die übergeben und verwendet werden können |
| Optionale | Type? (Syntaktischer Zucker für Optional<Type>) |
Wert | Repräsentiert entweder einen Wert vom Typ Type oder dessen Fehlen (nil) |
Die Wahl zwischen Wert- und Referenztypen hängt von der Aufgabe ab: Werttypen sind vorzuziehen für kleine Daten und zur Gewährleistung der Thread-Sicherheit, Referenztypen für komplexe Objekte, die gemeinsamen Zustand und Vererbung erfordern.