Avatar
extension Either: Publisher where L: Publisher, R: Publisher, L.Failure == R.Failure { public typealias Output = Either<L.Output, R.Output> public typealias Failure = L.Failure public func receive<S>(subscriber: S) where S : Subscriber, L.Failure == S.Failure, Either<L.Output, R.Output> == S.Input { switch self { case .left(let left): return left .map(Output.left) .subscribe(subscriber) case .right(let right): return right .map(Output.right) .subscribe(subscriber) } } } EitherをPublisherにして public extension Publisher { func flatMap<T, P>(maxPublishers: Subscribers.Demand = .unlimited, @Expressive<P> transform: @escaping (Self.Output) -> P) -> Publishers.FlatMap<P, Self> where T == P.Output, P : Publisher, Self.Failure == P.Failure { self.flatMap(maxPublishers: maxPublishers, transform) } } こうするじゃろ myPublisher.flatMap { value in if value.isNantoka() { URLSession.shared.dataTaskPublisher(for: hitotsumenoAPI).mapError(...) } else { URLSession.shared.dataTaskPublisher(for: futatsumenoAPI).mapError(...) } } flatMapの中でif文が使えるようになるんじゃ
12:17 PM
combineの書き味を良くするのに、ResultBuilderを使って色々ハックができる (edited)
12:18 PM
型推論をめちゃくちゃ強化するツールでもあるので、いろんなことが出来る