Intern
Какви са типовете данни и кои съществуват?
sobes.tech AI
Отговор от AI
Типовете данни определят набора от възможни стойности и операции, които могат да бъдат извършвани върху тях. В Swift те се делят на стойностни типове и референтни типове.
Стойностни типове:
- Стойностите се копират при присвояване или предаване към функция.
- Всяка променлива или константа запазва собствена, независима копия на данните.
- Промени в една копия не влияят на другите.
Примери за стойностни типове:
- Структури (
struct) - Енумерации (
enum) - Tuple (
tuple) - Основни типове:
Int,Double,Bool,String, масиви (Array), речници (Dictionary), множества (Set).
// Пример за стойностен тип: struct
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 получава копие на p1
p2.x = 10 // Промяната в p2 не влияе на p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)
Референтни типове:
- Стойностите не се копират. При присвояване или предаване
- към функция се предава препратка към същия екземпляр на данните в паметта.
- Няколко променливи или константи могат да сочат към един и същ екземпляр.
- Промените чрез една препратка са видими през всички други.
Примери за референтни типове:
- Класове (
class) - Функции (
func) - Затваряния (
closure)
// Пример за референтен тип: class
class Circle {
var radius: Double
init(radius: Double) {
self.radius = radius
}
}
var c1 = Circle(radius: 5.0)
var c2 = c1 // c2 сочи към същия екземпляр като c1
c2.radius = 10.0 // Промяната в c2 влияе и на c1
print("c1 radius: \(c1.radius)") // c1 radius: 10.0
print("c2 radius: \(c2.radius)") // c2 radius: 10.0
Таблица с основните типове:
| Категория | Тип(ове) | Стойностен/Референтен тип | Описание |
|---|---|---|---|
| Цели числа | Int, UInt, Int8, UInt8 и др. |
Стойностен | Цели числа с различен размер, със знак и без знак |
| Дробни числа | Float, Double |
Стойностен | Числа с десетична част |
| Булеви | Bool |
Стойностен | Логически стойности (true или false) |
| Стриймове | String |
Стойностен | Последователност от символи |
| Колекции | Array, Dictionary, Set |
Стойностен | Подредени/неподредени колекции от еднородни елементи |
| Структури | struct |
Стойностен | Сложни потребителски типове, съхраняващи свързани стойности |
| Енумерации | enum |
Стойностен | Определят общ тип за група свързани стойности |
| Tuple-ове | (value1, value2, ...) |
Стойностен | Групират няколко стойности в един сложен тип |
| Класове | class |
Референтен | Сложни потребителски типове, поддържащи наследяване и референтно поведение |
| Функции | () -> Void, (Int) -> String и др. |
Референтен | Блокове изпълним код |
| Затваряния | { (parameters) -> return type in code } |
Референтен | Самодостатъчни блокове код, които могат да бъдат предавани и използвани |
| Опционали | Type? (синтактичен захар за Optional<Type>) |
Стойностен | Представлява стойност от тип Type или отсъствието й (nil) |
Изборът между стойностни и референтни типове зависи от задачата: стойностните типове са предпочитани за малки данни и за безопасност при многонитови среди, референтните типове — за сложни обекти, изискващи споделено състояние и наследяване.