Intern
Co jsou datové typy a jaké existují?
sobes.tech AI
Odpověď od AI
Datové typy určují sadu možných hodnot a operací, které na nich lze provádět. V Swift jsou rozděleny na hodnotové typy a referenční typy.
Hodnotové typy:
- Hodnoty se při přiřazení nebo předání funkci kopírují.
- Každá proměnná nebo konstanta uchovává vlastní nezávislou kopii dat.
- Změny v jedné kopii neovlivňují ostatní.
Příklady hodnotových typů:
- Struktury (
struct) - Enum (
enum) - Tuple (
tuple) - Základní typy:
Int,Double,Bool,String, pole (Array), slovníky (Dictionary), množiny (Set).
// Příklad hodnotového typu: struct
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 dostává kopii p1
p2.x = 10 // Změna p2 neovlivní p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)
Referenční typy:
- Hodnoty se nekopírují. Při přiřazení nebo předání
- funkci se předává odkaz na stejnou instanci dat v paměti.
- Několik proměnných nebo konstant může odkazovat na stejnou instanci.
- Změny přes jeden odkaz jsou viditelné přes všechny ostatní.
Příklady referenčních typů:
- Třídy (
class) - Funkce (
func) - Uzávěry (
closure)
// Příklad referenčního typu: class
class Circle {
var radius: Double
init(radius: Double) {
self.radius = radius
}
}
var c1 = Circle(radius: 5.0)
var c2 = c1 // c2 odkazuje na stejnou instanci jako c1
c2.radius = 10.0 // Změna c2 ovlivní c1
print("c1 radius: \(c1.radius)") // c1 radius: 10.0
print("c2 radius: \(c2.radius)") // c2 radius: 10.0
Tabulka hlavních typů:
| Kategorie | Typ(y) | Hodnotový/Referenční typ | Popis |
|---|---|---|---|
| Celá čísla | Int, UInt, Int8, UInt8 atd. |
Hodnotový | Celá čísla různých velikostí, se znaménkem a bez něj |
| Plovoucí desetinná čísla | Float, Double |
Hodnotový | Čísla s desetinnou částí |
| Logické hodnoty | Bool |
Hodnotový | Logické hodnoty (true nebo false) |
| Řetězce | String |
Hodnotový | Sekvence znaků |
| Kolekce | Array, Dictionary, Set |
Hodnotový | Seřazené/nesřazené kolekce stejných typů prvků |
| Struktury | struct |
Hodnotový | Složené uživatelské typy, obsahující související hodnoty |
| Enumy | enum |
Hodnotový | Definují společný typ pro skupinu souvisejících hodnot |
| Tupley | (value1, value2, ...) |
Hodnotový | Skupiny několika hodnot do jednoho složeného typu |
| Třídy | class |
Referenční | Složené uživatelské typy podporující dědičnost a referenční chování |
| Funkce | () -> Void, (Int) -> String atd. |
Referenční | Bloky vykonatelného kódu |
| Uzávěry | { (parameters) -> return type in code } |
Referenční | Samostatné bloky kódu, které lze předat a použít |
| Volitelné | Type? (syntaktický cukr pro Optional<Type>) |
Hodnotový | Představuje buď hodnotu typu Type, nebo její absenci (nil) |
Volba mezi hodnotovými a referenčními typy závisí na úkolu: hodnotové typy jsou vhodnější pro malé údaje a bezpečnost vláken, referenční typy pro složité objekty vyžadující sdílený stav a dědičnost.