iOS State Management
Priority: P0
Implementation Workflow
- Choose observation approach — Use
@Observable(iOS 17+) for modern SwiftUI;Combinewith@Publishedfor UIKit or broader compatibility. - Expose state clearly — Use UDF pattern: ViewModel exposes
Inputenum (events) andOutputstruct (state). - Manage subscriptions — Store Combine subscriptions in
Set<AnyCancellable>with.store(in: &cancellables). - Dispatch to main thread — Use
@MainActoror.receive(on: DispatchQueue.main)for UI updates. - Use exhaustive ViewState — Prefer a single
ViewStateenum (.loading,.success(data),.error(failure)).
See Combine and Observation framework examples
Anti-Patterns
- ❌ Uncleared subscriptions — always use
.store(in: &cancellables) - ❌ UI updates on background thread — use
.receive(on: .main)or@MainActor - ❌ Manual
objectWillChange.send()— use@Publishedor@Observableinstead