📌
【Swift】Combine Publishers
作成中
Concatenate
Future
宣言から3秒後にfuturePublisherが「Just("成功しました")」、もしくは「Just(.failure(SomeError()))」に変化するといったイメージか
import Combine
struct SomeError: Error {}
let futurePublisher: Future<String, SomeError> = Future { promise in
DispatchQueue.global().asyncAfter(deadline: .now() + 3) {
if Bool.random() {
return promise(.success("成功しました。"))
} else {
return promise(.failure(SomeError()))
}
}
}
let cancellable = futurePublisher
.sink(receiveCompletion: { completion in
switch completion {
case .finished:
print("Finished.")
case .failure(let error):
print("error: \(error)")
}
}, receiveValue: { value in
print("value: \(value)")
})
Deferred
購読されるまで内部のパブリッシャの生成を遅延する
import Combine
func getNumer() -> Int {
Thread.sleep(forTimeInterval: 5)
return 10
}
print("publisher1の作成開始")
let publisher1 = Just(getNumer()) // numberの取得に5秒かかる
print("publisher1の作成完了")
print("publisher2の作成開始")
let publisher2 = Deferred {
return Just(getNumer())
}
print("Deferredは、実際に購読されるまで中のPublisherを生成しない。そのため、一瞬で終わる。")
Discussion