Sobes.tech
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)

Изборът между стойностни и референтни типове зависи от задачата: стойностните типове са предпочитани за малки данни и за безопасност при многонитови среди, референтните типове — за сложни обекти, изискващи споделено състояние и наследяване.