TGViewer
YDC — Pizza Powered iOS YDC — Pizza Powered iOS @youngdacode · 242 subscribers
Post #30 274
🤔 Combine vs AsyncStream — что выбрать в 2025?

Наткнулся на обзор базовых функций 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

👏
Tanaschita Comparing Combine's subjects with AsyncStream in Swift Combine's subjects like PassthroughSubject and CurrentValueSubject have been the standard way to emit values in reactive architectures. With Swift concurrency, AsyncStream offers a concurrency-native alternative. Let's look at how both compare and where each…
  • 👍 2
More from @youngdacode
  1. Mar 10, 2026😄 Статья CoordinatorKit 2.0: Production-Ready SwiftUI Navigation это пример честного разб…
  2. Mar 4, 2026☝️ 🚀 Как MCP-аналитика помогает AI-агентам кодирования принимать более «осознанные» решен…
  3. Feb 16, 2026☝️ В прошлом посте мы говорили про клиент-серверное взаимодействие: API, REST, запрос-отве…
  4. Feb 15, 2026☝️ 📦 Размер приложения — это не просто цифра в App Store Размер приложения напрямую влияе…
  5. Feb 13, 2026😏 Разберём разницу между some View и AnyView в SwiftUI. Тема не новая, но споры о правиль…
  6. Feb 9, 2026Вечернее-занимательное чтение. Пишет iOS разработчик с опытом, обзор на пост от iOS разраб…
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 →