Sobes.tech
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 nagu Int, 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 struct või enum, 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.