Наткнулся на обзор базовых функций AsyncStream
, где автор сравнивает Combine и AsyncStream — и делает вывод: для сложных кейсов (
debounce, merge, combineLatest) пока async/await в чистом виде проигрывает.😳 Но!
🧩 Swift Async Algorithms
- Apple выпустила пакет Swift Async Algorithms, который добавляет к AsyncSequence знакомые реактивные операторы:
debounce, throttle, combineLatest, merge, zip и другие.- Это значит, что с помощью Async Algorithms можно “достроить” AsyncStream почти до уровня Combine — реактивное программирование доступно и в мире async/await.
👉 swift-async-algorithms
🍎 Что со SwiftUI?
Раньше реактивная связка данных (
@Published, ObservableObject, @State, .onReceive()) полностью зависела от Combine.С iOS 17 / Swift 5.9 появился новый Observation framework с макросом
@Observable, который заменяет Combine.Теперь можно писать так 👇
import Observation
@Observable
final class ViewModel {
private(set) var count = 0
func increment() { count += 1 }
}
И во View просто использовать:
let model = ViewModel()
SwiftUI автоматически перерисует интерфейс при изменении
count.⚙️ Новый Observation не использует Combine — он реализует надежную, типобезопасную и производительную реализацию шаблона проектирования «Observer» (строится на keyPath-ах).
👉 infinum.com
Для iOS 13+ можно использовать библиотеку Perception — backport Observation без Combine.
⚡️ Производительность:
- async/await и AsyncSequence компиляторно оптимизированы и имеют меньший оверхед, чем цепочки Combine с AnyCancellable.
- При линейной обработке событий async-подход быстрее и проще.
- Но при многоступенчатых реактивных пайплайнах (
switchMap, flatMap, retry) Combine остаётся удобнее и гибче.📌 Вывод:
- Если вы создаёте новый проект или модуль — берите async/await + Async Algorithms + Observation. Код проще, быстрее и ближе к будущему Swift.
- Если у вас уже большая система на Combine — не спешите с миграцией, но точно стоит начать экспериментировать 👀
- Swift всё увереннее движется к миру async/await — и это уже не тренд, а курс платформы.
#L #AsyncStream #AsyncSequence #asyncawait #Combine #Observation #Perception
👏