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 zoalsInt,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
structofenum, 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.