E
EasySwift iOS🍏
@swift_ioss2.9K подп.
755просмотров
26.0%от подписчиков
2 марта 2026 г.
Score: 831
Поделюсь немного опытом переезда на async/await в пет проекте. ⚠️ UIKit монолит 2019 года — 80% кода на completion handlers. Переписывать всё под async/await казалось адом. Решил идти постепенно: withCheckedContinuation + @MainActor class LegacyAPI { func fetchUser(completion: @escaping (Result<User, Error>) -> Void) } // Обёртка: extension LegacyAPI { @MainActor func fetchUser() async throws -> User { try await withCheckedThrowingContinuation { cont in fetchUser { result in cont.resume(with: result) } } } } ✔️ Правило: новая публичная функция — async, старая остаётся для legacy. Ключевые приёмы: ➡️ @MainActor на extension — UI обновления без GCD хаоса ➡️ Task { @MainActor in ... } для контроллеров ➡️ async let для параллельного нетворкинга ➡️ Actor для shared state (UserSettings → @globalActor) 😮 До/После: // Было (callback hell) fetchUser { user in fetchPosts(userId: user.id) { posts in self.tableView.reloadData() } } // Стало let user = try await api.fetchUser() let posts = try await api.fetchPosts(userId: user.id) await MainActor.run { tableView.reloadData() } 💯 Получилось неплохо. Конечно, не без всяких моментов, но зато код читается в разы лучше теперь. Делитесь опытом, кто с чем боролся больше всего?
755
просмотров
1284
символов
Да
эмодзи
Нет
медиа

Другие посты @swift_ioss

Все посты канала →
Поделюсь немного опытом переезда на async/await в пет проект — @swift_ioss | PostSniper