Стандартные типы
var number: Int = 42
var pi: Double = 3.1415
var isActive: Bool = true
var character: Character = "A"
var string: String = "Hello"
Коллекции (из стандартной библиотеки)
var array: [Int] = [1, 2, 3]
var dictionary: [String: Int] = ["one": 1, "two": 2]
var set: Set<String> = ["A", "B", "C"]
Tuple (Кортеж)
var coordinates: (x: Int, y: Int) = (10, 20)
Enum (без ассоциированных значений Reference Type)
enum CompassDirection {
case north, south, east, west
}
Struct (Структура)
struct Point {
var x: Int
var y: Int
}
Class (Класс)
class Person {
var name: String
init(name: String) { self.name = name }
}
Closure (Замыкание)
let closure = { print("Hello") }
NS-типы из Foundation
let nsArray = NSArray(array: [1, 2, 3])
let nsDictionary = NSDictionary(dictionary: ["key": "value"])
Function (Функция)
func greet() { print("Hello") }
Критерий | Value Type | Reference Type |
---|---|---|
Хранение | Стек (обычно) | Куча |
Копирование | Глубокая копия | Копируется ссылка |
Потокобезопасность | Да | Нет (требует синхронизации) |
Изменяемость | Мутация только при var | Всегда изменяемы |
Производительность | Быстрее для небольших данных | Дороже для создания |
Деинициализация | Нет | Есть (deinit) |
Copy-on-Write (CoW)
var array1 = [1, 2, 3]
var array2 = array1 // Фактического копирования пока нет
array2.append(4) // Реальное копирование происходит здесь
Использование inout
func modifyValue(_ value: inout Int) {
value += 1
}
Смешанные типы
struct User {
var name: String // Value type
var avatar: UIImage // Reference type
}
в Swift большинство базовых структур данных являются Value Type (Int, String, Array, Dictionary, Set, Struct, Enum), тогда как Class, Closure и NS-типы относятся к Reference Type. Выбор между ними зависит от требований к производительности, необходимости совместного использования данных и семантики изменяемости.