iOS State Management Standards
Priority: P0
Implementation Guidelines
Combine (Reactive)
- •Publishers: Use
@Publishedfor state in ViewModels. UsePassthroughSubjectfor one-time events (Transitions/Alerts). - •Memory Management: Store subscriptions in a
Set<AnyCancellable>. Ensure they are cleared on deinit. - •Operators: Use operators like
.debounce,.filter,.map, and.flatMapto transform input stream. - •Schedulers: Always prefix UI property updates with
@MainActoror use.receive(on: DispatchQueue.main).
Observation Framework (iOS 17+)
- •@Observable: Use for modern, macro-based observation. Replace
ObservableObjectin SwiftUI apps. - •Binding: Use
$statefor two-way bindings in SwiftUI. No boilerplateobjectWillChangecalls.
Best Practices
- •ViewState Unification: Prefer a single
Stateenum or struct (Unidirectional) for complex screens. - •Avoid Over-Reactive: Don't use Combine for simple local flags. Use standard
@Stateor variables.
Anti-Patterns
- •Subscription Leaks:
**No uncleared subscriptions**: Always use .store(in: &cancellables). - •Main Thread Violation:
**No UI updates on Background**: Use .receive(on: .main). - •Manual objectWillChange:
**No manual notifications**: Use @Published or @Observable.