Sobes.tech
Junior — Middle

Hoe onderscheid je referentiegebaseerde gegevenstypen van gegevenstypen die waarden direct opslaan?

sobes.tech AI

Antwoord van AI

In iOS (Swift en Objective-C) worden datatypes onderverdeeld in waarde types (value types) en referentie types (reference types).

  • Waarde types slaan de gegevens direct op. Bij toewijzing of het doorgeven aan een functie wordt een kopie van de gegevens gemaakt. In Swift omvatten deze structuren (struct), enumeraties (enum) en basistypen zoals Int, Double, Bool.

  • Referentie types slaan een verwijzing op naar een geheugenlocatie waar de gegevens zich bevinden. Bij toewijzing wordt de verwijzing gekopieerd, niet de gegevens zelf. Wijzigingen via één verwijzing zijn zichtbaar via andere. In Swift zijn dit klassen (class).

Hoe te onderscheiden:

  • In Swift, als een type is gedeclareerd als struct of enum, is het een value type.
  • Als het is gedeclareerd als class, is het een reference type.

Voorbeeld:

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 - de kopie is niet veranderd

var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"
print(person1.name) // Bob - beide variabelen verwijzen naar hetzelfde object

Op deze manier, door het gedrag bij toewijzing en wijziging te observeren, kunnen referentie-gebaseerde types worden onderscheiden van types die waarden direct opslaan.