Sobes.tech
Junior

Jak uzyskać dostęp do obiektów klasy i obiektów struktury w Swift?

sobes.tech AI

Odpowiedź od AI

Obiekty klasy — przez odniesienie; obiekty struktury — przez wartość.

Klasy (typ referencyjny):

Przy przypisaniu instancji klasy do zmiennej lub stałej, przypisywane jest odniesienie do tej samej instancji. Zmiany dokonane przez jedno odniesienie będą widoczne we wszystkich odniesieniach wskazujących na tę instancję.

class MojaKlasa {
    var wartosc: Int = 0
}

let obiekt1 = MojaKlasa() // Tworzenie instancji
let obiekt2 = obiekt1   // obiekt2 teraz wskazuje na tę samą instancję
obiekt1.wartosc = 10      // Zmieniamy przez obiekt1
print(obiekt2.wartosc)    // Wyświetli 10 - zmiana widoczna przez obiekt2

Struktury (typ wartości):

Przy przypisaniu instancji struktury do zmiennej lub stałej, tworzona jest kopia tej instancji. Każda zmienna/stała zawiera własną, niezależną kopię danych. Zmiany w jednej kopii nie wpływają na inne.

struct MojaStruktura {
    var wartosc: Int = 0
}

var struktura1 = MojaStruktura() // Tworzenie instancji
var struktura2 = struktura1   // Tworzy kopię struktura1
struktura1.wartosc = 20          // Zmieniamy przez struktura1
print(struktura2.wartosc)        // Wyświetli 0 - struktura2 pozostaje niezmieniona

Porównanie:

Cecha Klasy Struktury
Typ Referencyjny Wartościowy
Przypisanie Kopiuje odniesienie Kopiuje wartość
Zmiany Widoczne na wszystkich odniesieniach Dotyczą tylko kopii
Dziedziczenie Obsługiwane Nieobsługiwane
Tożsamość Można sprawdzić (===) Nie ma koncepcji tożsamości

Wybór między klasą a strukturą zależy od wymagań. Struktury często używa się dla małych, prostych typów danych reprezentujących wartość (np. Point, Size, Range). Klasy są używane dla bardziej złożonych typów danych, które wymagają semantyki referencyjnej, dziedziczenia lub zarządzania cyklem życia obiektu (np. UIViewController, UIView).