💡
Combineで上流でエラーではなくnilとして受け取りたい
背景
下流からはエラーじゃないと返せないけど、上流ではnilで受け取りたいみたいな。
// このメソッドは変更できない
func get() -> AnyPublisher<String, Error> {
fatalError()
}
// 呼び出し側では無ければnilとして受け取りたいがこのままだとエラーで返ってくる
get().sink { _ in
...
} receiveValue: { str in
...
}.store(in: &cancellables)
解決策
mapで型を変換してエラーをreplaceする!
get()
.map { str -> String? in str }
.replaceError(with: nil)
.sink { _ in
...
} receiveValue: { str in
...
}.store(in: &cancellables)
もし他に解決策ありましたら教えてください🙏
お仕事の依頼もお待ちしております!
Discussion