TGViewer
Мобильный трудоголик Мобильный трудоголик @hardworkerit · 1.64K subscribers
Post #221 1.36K
🔢 Swift Collections: Секретное оружие для эффективного кода.

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


Deque.

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

Пример:

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


import Collections

final class ActionHistory<Action> {
private var history: Deque<Action> = []
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<Notification>()
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<String>()
recentProducts.append("iPhone 17")
recentProducts.append("iPad Pro")
recentProducts.append("iPhone 17") // Не добавится

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



OrderedDictionary.

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

Пример:

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


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

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



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

🔹 Производительность: правильные структуры данных экономят ресурсы.
🔹 Читаемость: код становится проще для понимания.
🔹 Надежность: меньше шансов допустить ошибку в реализации.


🔗 Ссылка на подробную статью


💡 Вывод:

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


➡️ Подписаться на канал
Мобильный трудоголик
  • 👍 23
  • 🙏 8
  • 🔥 2
  • ❤ 1
More from @hardworkerit
  1. Oct 6, 2026🔢 Swift 6.4: новая диагностика ретейн циклов. В Swift 6.4 появилась новая диагностика, ко…
  2. Oct 4, 2026🔢 SwiftUI: определение угла раскрытия iPhone Duo. В iOS 27.1 появился модификатор .onHing…
  3. Oct 2, 2026👣 Архитекторы, тестировщики и кодеры. Создаем мультиагентную команду Разработка с ИИ-аген…
  4. Oct 1, 2026🔢 Работа с Picture-in-Picture в iOS. Picture-in-Picture - системная функция iOS, которая…
  5. Sep 29, 2026🔢 Управление тулбарами на iPhone Duo. На iPhone Duo элементы управления навигацией, дейст…
  6. Sep 27, 2026🔢 Новые возможности Hashable в Swift 6.4 В Swift 6.4 добавили Hashable для нескольких тип…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →