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.