Last active
November 13, 2021 09:16
-
-
Save yimajo/1fefc549f3d88160ceac67fc3b21fa98 to your computer and use it in GitHub Desktop.
Publishers.MergeMany sample
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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