Intern
Ce sunt tipurile de date și care există?
sobes.tech AI
Răspuns de la AI
Tipurile de date determină setul valorilor posibile și operațiile care pot fi efectuate asupra lor. În Swift, acestea sunt împărțite în Tipuri de Valoare și Tipuri de Referință.
Tipuri de Valoare:
- Valorile sunt copiate la atribuire sau transmitere către o funcție.
- Fiecare variabilă sau constantă păstrează o copie independentă a datelor.
- Modificările într-o copie nu afectează celelalte.
Exemple de Tipuri de Valoare:
- Structuri (
struct) - Enumerări (
enum) - Tuples (
tuple) - Tipuri de bază:
Int,Double,Bool,String, array-uri (Array), dicționare (Dictionary), seturi (Set).
// Exemplu de Tip de Valoare: struct
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 primește o copie a lui p1
p2.x = 10 // Modificarea lui p2 nu afectează pe p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)
Tipuri de Referință:
- Valorile nu sunt copiate. La atribuire sau transmitere
- către o funcție, se transmite o referință la aceeași instanță de date din memorie.
- Mai multe variabile sau constante pot face referire la aceeași instanță.
- Modificările printr-o referință sunt vizibile prin toate celelalte.
Exemple de Tipuri de Referință:
- Clase (
class) - Funcții (
func) - Closures (
closure)
// Exemplu de Tip de Referință: class
class Circle {
var radius: Double
init(radius: Double) {
self.radius = radius
}
}
var c1 = Circle(radius: 5.0)
var c2 = c1 // c2 face referire la aceeași instanță ca și c1
c2.radius = 10.0 // Modificarea lui c2 afectează și pe c1
print("c1 radius: \(c1.radius)") // c1 radius: 10.0
print("c2 radius: \(c2.radius)") // c2 radius: 10.0
Tabel cu principalele tipuri:
| Categoria | Tip(i) | Tip Valoare/Referință | Descriere |
|---|---|---|---|
| Numere întregi | Int, UInt, Int8, UInt8 etc. |
Valoare | Numere întregi de diferite dimensiuni, semnate și nesemnate |
| Numere în virgulă mobilă | Float, Double |
Valoare | Numere cu parte fracționară |
| Booleene | Bool |
Valoare | Valori logice (true sau false) |
| Șiruri de caractere | String |
Valoare | Secvență de caractere |
| Colecții | Array, Dictionary, Set |
Valoare | Colecții ordonate/neordonate de elemente de același tip |
| Structuri | struct |
Valoare | Tipuri compuse personalizate, care păstrează valori legate |
| Enumerări | enum |
Valoare | Definește un tip comun pentru un grup de valori legate |
| Tuples | (value1, value2, ...) |
Valoare | Grupează mai multe valori într-un singur tip compus |
| Clase | class |
Referință | Tipuri compuse personalizate, suportând moștenirea și comportament de referință |
| Funcții | () -> Void, (Int) -> String etc. |
Referință | Blocuri de cod executabil |
| Closures | { (parameters) -> return type in code } |
Referință | Blocuri de cod autonome, care pot fi transmise și utilizate |
| Opționale | Type? (sugar sintactic pentru Optional<Type>) |
Valoare | Reprezintă fie o valoare de tip Type, fie absența acesteia (nil) |
Alegerea între Tipuri de Valoare și Tipuri de Referință depinde de sarcină: Tipurile de Valoare sunt preferate pentru date mici și pentru siguranța în medii multi-thread, în timp ce Tipurile de Referință sunt pentru obiecte complexe, care necesită stare comună și moștenire.