Junior — Middle
Kuidas eristada viitepõhiseid andmetüüpe otse väärtusi salvestavatest andmetüüpidest?
sobes.tech AI
Vastus AI-lt
iOS-s (Swift ja Objective-C) andmetüübid jagunevad väärtusetüüpideks (value types) ja viidete tüüpideks (reference types).
-
Väärtusetüübid salvestavad andmed otse. Määrates või funktsioonile edasi andes luuakse andmete koopia. Swiftis kuuluvad sellesse struktuurid (
struct), loendid (enum) ning põhitüübid naguInt,Double,Bool. -
Viidete tüübid hoiavad viidet mälu piirkonnale, kus andmed asuvad. Määrates kopeeritakse viide, mitte andmed ise. Muudatused ühe viite kaudu on nähtavad ka teistes. Swiftis on need klassid (
class).
Kuidas neid eristada:
- Kui Swiftis on tüüp deklareeritud kui
structvõienum, siis on see väärtusetüüp. - Kui deklareeritud kui
class, siis on see viidetüüp.
Näide:
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 - koopia ei muutunud
var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"
print(person1.name) // Bob - mõlemad muutujad viitavad samale objektile
Nii saab määramise ja muutmise käitumise põhjal eristada viidetüüpe ja väärtusetüüpe.