Skip to content

Instantly share code, notes, and snippets.

@yimajo
Last active November 13, 2021 09:16
Show Gist options
  • Save yimajo/1fefc549f3d88160ceac67fc3b21fa98 to your computer and use it in GitHub Desktop.
Save yimajo/1fefc549f3d88160ceac67fc3b21fa98 to your computer and use it in GitHub Desktop.
Publishers.MergeMany sample
import Combine
struct ReducerContainer {
let reducer: () -> (AnyPublisher<Int, Never>)
init(reducer: @escaping () -> (AnyPublisher<Int, Never>)) {
self.reducer = reducer
}
static func combine(_ reducers: [ReducerContainer]) -> ReducerContainer {
.init {
Publishers.MergeMany(
reducers.map {
$0.reducer()
}
)
.eraseToAnyPublisher()
}
}
}
let reducerContainer1 = ReducerContainer {
// 処理登録
Just(1).eraseToAnyPublisher()
}
let reducerContainer2 = ReducerContainer {
// 処理登録
Deferred {
// Defferredされている処理は即時実行されない
Future { promise in
promise(.success(2))
}
}
.eraseToAnyPublisher()
}
let reducerContainer = ReducerContainer.combine([reducerContainer1, reducerContainer2])
reducerContainer.reducer().sink { value in
print("receiveValue: \(value)")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment