Стандартная библиотека Swift (iOS/macOS): полный обзор

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Стандартная библиотека Swift (iOS/macOS): полный обзор

Стандартная библиотека Swift — это фундаментальный набор типов, протоколов и функций, встроенных непосредственно в язык. Она обеспечивает базовую функциональность, необходимую для разработки под iOS, macOS, watchOS и tvOS. В отличие от фреймворков Foundation или UIKit, которые являются частью SDK, стандартная библиотека Swift доступна сразу без дополнительных импортов. В этой статье мы подробно разберем её ключевые компоненты, структуры данных, протоколы и механизмы управления памятью.

Основные типы данных и коллекции

Swift предоставляет мощные и типобезопасные коллекции, оптимизированные для производительности.

Массивы (Array)

Упорядоченная коллекция элементов одного типа. Поддерживает произвольный доступ и динамическое изменение размера.

var numbers: [Int] = [1, 2, 3]
numbers.append(4)
let first = numbers[0] // 1
numbers.sort()

Множества (Set)

Неупорядоченная коллекция уникальных элементов. Идеальна для проверки принадлежности и математических операций.

let setA: Set<Int> = [1, 2, 3, 4]
let setB: Set<Int> = [3, 4, 5, 6]
let intersection = setA.intersection(setB) // {3, 4}
let union = setA.union(setB) // {1, 2, 3, 4, 5, 6}

Словари (Dictionary)

Неупорядоченная коллекция пар "ключ-значение". Ключи должны быть хешируемыми (Hashable).

var capitals: [String: String] = ["Россия": "Москва", "США": "Вашингтон"]
capitals["Германия"] = "Берлин"
if let russiaCapital = capitals["Россия"] {
    print(russiaCapital) // Москва
}

Протоколы: основа универсальности Swift

Стандартная библиотека Swift построена на протоколах, которые определяют общий интерфейс для различных типов.

  • Equatable — позволяет сравнивать экземпляры с помощью ==.
  • Hashable — требуется для использования типа в качестве ключа словаря или элемента множества.
  • Comparable — даёт возможность упорядочивать объекты (<, >, <=, >=).
  • Codable — объединяет Encodable и Decodable для сериализации в JSON, Property List и другие форматы.
  • CaseIterable — автоматически предоставляет коллекцию всех значений перечисления.

Пример использования Codable

struct User: Codable {
    let id: Int
    let name: String
    let isActive: Bool
}

let json = """
{
    "id": 42,
    "name": "Иван",
    "isActive": true
}
""".data(using: .utf8)!

let decoder = JSONDecoder()
if let user = try? decoder.decode(User.self, from: json) {
    print(user.name) // Иван
}

Работа с памятью: ARC и Copy-on-Write

Swift использует Automatic Reference Counting (ARC) для управления памятью ссылочных типов (классов). Для структур и перечислений действует семантика копирования значения, но с оптимизацией Copy-on-Write (COW) для коллекций.

var array1 = [1, 2, 3]
var array2 = array1 // Пока не изменяем — данные общие
array2.append(4)    // Здесь происходит реальное копирование (COW)
print(array1.count) // 3 — исходный массив не изменился

Универсальные шаблоны (Generics)

Generics позволяют писать гибкие и переиспользуемые функции и типы без потери производительности.

func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
    let temporaryA = a
    a = b
    b = temporaryA
}

var x = 10
var y = 20
swapTwoValues(&x, &y) // x = 20, y = 10

Опциональные типы (Optionals)

Безопасная работа с отсутствующими значениями — одна из ключевых особенностей Swift. Опционалы предотвращают null-pointer исключения.

var optionalString: String? = "Привет"
// Optional binding
if let unwrapped = optionalString {
    print(unwrapped.uppercased()) // ПРИВЕТ
}

// Nil-coalescing operator
let result = optionalString ?? "Значение по умолчанию"

Работа с числами и строками

Стандартная библиотека включает богатый набор инструментов для работы с числами (Int, Float, Double) и строками (String

Рекомендаций