Combine Code Review
Quick Reference
| Issue Type | Reference | |------------|-----------| | Publishers, Subjects, AnyPublisher | references/publishers.md | | map, flatMap, combineLatest, switchToLatest | references/operators.md | | AnyCancellable, retain cycles, [weak self] | references/memory.md | | tryMap, catch, replaceError, Never | references/error-handling.md |
Review Checklist
- [ ] All
sinkclosures use[weak self]when self owns cancellable - [ ] No
assign(to:on:self)usage (useassign(to: &$property)or sink) - [ ] All AnyCancellables stored in Set or property (not discarded)
- [ ] Subjects exposed as
AnyPublisherviaeraseToAnyPublisher() - [ ]
flatMapused correctly (not whenmap + switchToLatestneeded) - [ ] Error handling inside
flatMapto keep main chain alive - [ ]
tryMapfollowed bymapErrorto restore error types - [ ]
receive(on: DispatchQueue.main)before UI updates - [ ] PassthroughSubject for events, CurrentValueSubject for state
- [ ] Future wrapped in Deferred when used with retry
When to Load References
- Reviewing Subjects or publisher selection → publishers.md
- Reviewing operator chains or combining publishers → operators.md
- Reviewing subscriptions or memory issues → memory.md
- Reviewing error handling or try* operators → error-handling.md
Review Questions
- Are all subscriptions being retained? (Check for discarded AnyCancellables)
- Could any sink or assign create a retain cycle with self?
- Does flatMap need to be switchToLatest for search/autocomplete?
- What happens when this publisher fails? (Will it kill the main chain?)
- Are error types preserved or properly mapped after try* operators?