WWDC 19
Combine in Practice
try*** variants (tryMap etc.) – accepts a throwing closure, captures thrown errors and converts them to stream failures
.decode(User.self, JSONDecoder()) -> <User, Error>
.assertNoFailure() -> <T, Never> – asserts if it receives a failure
Just(value) – just publishes this single value
.catch { otherPublisher } – if it receives an error, cancels the connection and subscribes to the fallback publisher instead
.flatMap { otherPublisher } – maps all values & errors to this publisher, returns whatever it outputs
.publisher(for: \.name) – like map { $0.name } ?…
.receive(on: RunLoop.main)
Subscribers:
.sink { x in … }
Subject: both subscriber and publisher, broadcasts to multiple subscribers, you can send() manually
PassthroughSubject: stores no value, so you’ll only see values some time after you subscribe
CurrentValue: stores last value, allows new subscribers to catch up
@Published var password: String ⭢ property wrapper that adds a publisher
Future { promise in … promise(.success(data)) } ⭢ publisher that does something asynchronously and returns a result once