Добавить объявление

Swift Collections: Секретное оружие для эффективного кода

Часто в повседневной работе нам кажется, что массивы, словари и множества покрывают все задачи, но есть инструменты, которые могут сделать ваш код эффективнее, чище и надежнее. Сегодня разберем несколько структур из библиотеки swift-collections, которые решат проблемы, о которых вы могли не подозревать.

Deque:


Deque - это оптимизированная версия массива, которая позволяет добавлять и удалять элементы с начала и конца за O(1). В то время как Array тратит O(n) на вставку в начало.

Пример:

Например, код из фоторедактора с функцией отмены последних действий.

import Collections

final class ActionHistory {
private var history: Deque = []
private let capacity: Int

init(capacity: Int = 50) {
self.capacity = capacity
}

func addAction(_ action: Action) {
if history.count >= capacity {
history.removeFirst() // Удаляем самое старое действие
}
history.append(action)
}

func undo() -> Action? {
history.popLast()
}
}

При частом изменении начала коллекции Deque работает значительно быстрее Array.

Heap:


Heap автоматически сортирует элементы по приоритету. Например, идеально для обработки задач с разной срочностью.

Пример:

Система уведомлений, где сообщения от администратора должны показываться первыми.

struct Notification: Comparable {
let message: String
let priority: Int

static func < (lhs: Notification, rhs: Notification) -> Bool {
lhs.priority < rhs.priority
}
}

var notifications = Heap()
notifications.insert(Notification(message: "Обновление системы", priority: 1))
notifications.insert(Notification(message: "Новое сообщение", priority: 3))

// Сначала получим уведомление с priority = 3
let nextNotification = notifications.popMax()

OrderedSet:


OrderedSet - это гибрид Array и Set, который сохраняет порядок элементов и гарантирует их уникальность.

Пример:

Список недавно просмотренных товаров в маркетплейсе, где важно и избежать дублей, и сохранить порядок.

var recentProducts = OrderedSet()
recentProducts.append("iPhone 17")
recentProducts.append("iPad Pro")
recentProducts.append("iPhone 17") // Не добавится

print(recentProducts) // ["iPhone 17", "iPad Pro"]

OrderedDictionary:


OrderedDictionary - это словарь, который запоминает порядок добавления элементов.

Пример:

Кэширование данных для экрана списка, где порядок элементов важен.

var userCache = OrderedDictionary()
userCache["user_1"] = User(name: "Анна")
userCache["user_2"] = User(name: "Иван")

// Порядок сохраняется при обходе
for (id, user) in userCache {
print("\(id): \(user.name)") // user_1: Анна, user_2: Иван
}

Зачем это все нужно:


  • Производительность: правильные структуры данных экономят ресурсы.

  • Читаемость: код становится проще для понимания.

  • Надежность: меньше шансов допустить ошибку в реализации.

Вывод:


Разработка - это не только о написании работающего кода, но и о выборе оптимальных инструментов. Постепенно расширяя свой арсенал, вы не просто пишете код, а создаете эффективные и масштабируемые решения.
22.10.2025 11 479