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文が使えるようになるんじゃ