Intern
Wat zijn datatypes en welke bestaan er?
sobes.tech AI
Antwoord van AI
Gegevenstypen bepalen de set mogelijke waarden en operaties die erop kunnen worden uitgevoerd. In Swift worden ze onderverdeeld in Value Types en Reference Types.
Value Types:
- Waarden worden gekopieerd bij toewijzing of doorgeven aan een functie.
- Elke variabele of constante bewaart een eigen, onafhankelijke kopie van de gegevens.
- Wijzigingen in één kopie beïnvloeden de andere niet.
Voorbeelden van Value Types:
- Structuren (
struct) - Enumeraties (
enum) - Tuples (
tuple) - Basis types:
Int,Double,Bool,String, arrays (Array), woordenboeken (Dictionary), verzamelingen (Set).
// Voorbeeld van Value Type: struct
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 krijgt een kopie van p1
p2.x = 10 // Wijziging in p2 beïnvloedt p1 niet
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)
Reference Types:
- Waarden worden niet gekopieerd. Bij toewijzing of doorgeven
- aan een functie wordt een verwijzing naar hetzelfde gegevensobject in het geheugen doorgegeven.
- Meerdere variabelen of constanten kunnen naar hetzelfde object verwijzen.
- Wijzigingen via één verwijzing zijn zichtbaar via alle andere.
Voorbeelden van Reference Types:
- Klassen (
class) - Functies (
func) - Closures (
closure)
// Voorbeeld van Reference Type: class
class Circle {
var radius: Double
init(radius: Double) {
self.radius = radius
}
}
var c1 = Circle(radius: 5.0)
var c2 = c1 // c2 verwijst naar hetzelfde object als c1
c2.radius = 10.0 // Wijziging in c2 beïnvloedt c1
print("c1 radius: \(c1.radius)") // c1 radius: 10.0
print("c2 radius: \(c2.radius)") // c2 radius: 10.0
Tabel met hoofdtypen:
| Categorie | Type(n) | Value/Reference Type | Beschrijving |
|---|---|---|---|
| Gehele getallen | Int, UInt, Int8, UInt8 enz. |
Value | Hele getallen van verschillende grootte, met en zonder teken |
| Drijvende kommagetallen | Float, Double |
Value | Getallen met een decimale component |
| Booleans | Bool |
Value | Logische waarden (true of false) |
| Strings | String |
Value | Sequentie van tekens |
| Collecties | Array, Dictionary, Set |
Value | Geordende/ongeordende verzamelingen van eentypige elementen |
| Structuren | struct |
Value | Samengestelde, gebruikersgedefinieerde types met gerelateerde waarden |
| Enumeraties | enum |
Value | Definiëren een algemene type voor een groep gerelateerde waarden |
| Tuples | (value1, value2, ...) |
Value | Groeperen meerdere waarden in één samengesteld type |
| Klassen | class |
Reference | Samengestelde, gebruikersgedefinieerde types met overerving en referentiegedrag |
| Functies | () -> Void, (Int) -> String enz. |
Reference | Uit te voeren codeblokken |
| Closures | { (parameters) -> return type in code } |
Reference | Zelfstandige codeblokken die kunnen worden doorgegeven en gebruikt |
| Opties | Type? (synthax suiker voor Optional<Type>) |
Value | Vertegenwoordigt ofwel een waarde van Type of afwezigheid ervan (nil) |
De keuze tussen Value en Reference Types hangt af van de taak: Value Types zijn beter voor kleine gegevens en voor threadveiligheid, Reference Types voor complexe objecten die gedeelde toestand en overerving vereisen.