Sobes.tech
Intern

Czym są typy danych i jakie istnieją?

sobes.tech AI

Odpowiedź od AI

Typy danych określają zestaw możliwych wartości i operacji, które można na nich wykonywać. W Swift dzielą się na Typy Wartości i Typy Referencyjne.

Typy Wartości:

  • Wartości są kopiowane podczas przypisywania lub przekazywania do funkcji.
  • Każda zmienna lub stała przechowuje własną niezależną kopię danych.
  • Zmiany w jednej kopii nie wpływają na inne.

Przykłady Typów Wartości:

  • Struktury (struct)
  • Enumy (enum)
  • Krotki (tuple)
  • Podstawowe typy: Int, Double, Bool, String, tablice (Array), słowniki (Dictionary), zbiory (Set).
// Przykład typu wartości: struct
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 otrzymuje kopię p1
p2.x = 10 // Zmiana p2 nie wpływa na p1

print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

Typy Referencyjne:

  • Wartości nie są kopiowane. Przy przypisaniu lub przekazaniu
  • przekazywana jest referencja do tego samego egzemplarza danych w pamięci.
  • Kilka zmiennych lub stałych może odnosić się do tego samego egzemplarza.
  • Zmiany przez jedną referencję są widoczne we wszystkich innych.

Przykłady typów referencyjnych:

  • Klasy (class)
  • Funkcje (func)
  • Zamknięcia (closure)
// Przykład typu referencyjnego: class
class Circle {
    var radius: Double

    init(radius: Double) {
        self.radius = radius
    }
}

var c1 = Circle(radius: 5.0)
var c2 = c1 // c2 odnosi się do tego samego egzemplarza co c1
c2.radius = 10.0 // Zmiana c2 wpływa na c1

print("c1 radius: \(c1.radius)") // c1 radius: 10.0
print("c2 radius: \(c2.radius)") // c2 radius: 10.0

Tabela głównych typów:

Kategoria Typ(y) Typ Wartości/Referencyjny Opis
Liczby całkowite Int, UInt, Int8, UInt8 itd. Wartość Liczby całkowite różnych rozmiarów, ze znakiem lub bez
Liczby zmiennoprzecinkowe Float, Double Wartość Liczby z częścią ułamkową
Logiczne Bool Wartość Wartości logiczne (true lub false)
Ciągi znaków String Wartość Sekwencja znaków
Kolekcje Array, Dictionary, Set Wartość Posortowane/niesortowane kolekcje tego samego typu
Struktury struct Wartość Złożone typy użytkownika, przechowujące powiązane wartości
Enumy enum Wartość Definiują wspólny typ dla grupy powiązanych wartości
Krotki (value1, value2, ...) Wartość Grupują kilka wartości w jeden złożony typ
Klasy class Referencja Złożone typy użytkownika obsługujące dziedziczenie i zachowanie referencyjne
Funkcje () -> Void, (Int) -> String itd. Referencja Bloki kodu do wykonania
Zamknięcia { (parameters) -> return type in code } Referencja Samodzielne bloki kodu, które można przekazywać i używać
Opcje Type? (składnia cukrowa dla Optional<Type>) Wartość Reprezentuje wartość typu Type lub jej brak (nil)

Wybór między Typami Wartości a Typami Referencyjnymi zależy od zadania: Typy Wartości są preferowane dla małych danych i zapewnienia bezpieczeństwa w wielowątkowości, Typy Referencyjne - dla złożonych obiektów wymagających wspólnego stanu i dziedziczenia.