Fuente
Затишна Галера | iOSКомпас 🧭1️⃣3️⃣7️⃣ Завдання 137Які основні lazy контейнери у Swift в...
712 Vistas/Alcance
2026-01-14 11:50
Mensaje №2337
#iOSКомпас 🧭1️⃣3️⃣7️⃣ Завдання 137Які основні lazy контейнери у Swift ви знаєете?Доброго здровля мої любі друзі. З вами ваш незмінний ios розробник Сергій з @badlinkschannel.1️⃣ lazy var - ліниві властивості (Swift)Властивість не створюється під час ініціалізації об’єкта, а лише при першому зверненні.class Example { lazy var expensiveObject: Data = { print("Об’єкт створено") return Data() }()}let example = Example()print("Ще не створено")_ = example.expensiveObject
2️⃣ LazySequence та LazyCollection (Swift)Дозволяють уникати зайвих обчислень.let numbers = (1...1000).lazy.map { $0 * 2 }print(numbers.first!)
3️⃣ SwiftUI ліниві контейнериСтворюють дочірні в’ю лише тоді, коли вони з’являються в зоні видимості.🔣 LazyVStack та LazyHStack:ScrollView { LazyVStack { ForEach(0..<1000) { index in Text("Рядок \(index)") } }}
🔣 LazyVGrid та LazyHGrid:let columns = [GridItem(.flexible()), GridItem(.flexible())]ScrollView { LazyVGrid(columns: columns) { ForEach(0..<100) { index in Text("Елемент \(index)") } }}
4️⃣ UIKit - перевикористовувані таблиці та колекціїЕлементи створюються лише тоді, коли вони потрібні для відображення.🔣 UITableView:func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell( withIdentifier: "Cell", for: indexPath ) cell.textLabel?.text = "Рядок \(indexPath.row)" return cell}
🔣 UICollectionView:func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell( withReuseIdentifier: "Cell", for: indexPath ) return cell}
5️⃣ UIScrollView плюс reusable viewsПоширений патерн, коли в’ю створюються динамічно під час прокрутки.for i in 0..<100 { let label = UILabel() label.text = "Елемент \(i)" stackView.addArrangedSubview(label)}
6️⃣ UITableViewDiffableDataSource та UICollectionViewDiffableDataSourceОновлення даних застосовуються ефективно та без зайвих перезавантажень.var snapshot = NSDiffableDataSourceSnapshot<Section, Item>()snapshot.appendSections([.main])snapshot.appendItems(items)dataSource.apply(snapshot, animatingDifferences: true)
7️⃣ Swift Concurrency та AsyncLazy патерниЛіниве асинхронне завантаження даних.lazy var imageTask = Task { try await loadImage()}
#️⃣ У підсумку, ліниві механізми в iOS охоплюють як мову Swift, так і SwiftUI та UIKit, і є ключовим інструментом для оптимізації продуктивності та пам’яті.@Zatishna_Galera