0

だから私が持っているのは、REST エンドポイントを使用するアプリケーションですが、それを使用する前です。後続のすべての API 呼び出しで使用する必要があるデバイスに DeviceId を割り当てる登録エンドポイントを呼び出す必要があります。

現在、Moya と RxSwift を使用してリクエストをチェーンおよび変換しています。

リクエストに応じてカスタムオペレーターを呼び出すと思っていたこと

self.mapRect
         .waitForDeviceId()
         .flatMap { [weak self] mapRect -> Single<Response> in
                    ...
          weakSelf.provider.rx.request(PCDepartmentTarget.list(coordinate: center, distance: maxDistance))
          }
          .map(to: [PCParkingLot].self)
          .bind(to: self.parkingLotOVariable)
          .disposed(by: self.disposeBag)

waitForDeviceId() は次のようになるはずだと思っていた場所。

extension ObservableType {

    func waitForDeviceId<R>() -> Observable<R> {

        PCDeviceIdService.shared.deviceIdObservable.flatMap { _ -> Observable<R> in
            return self
        }
    }
}

これは明らかにコンパイルされていません。

そのような and 演算子を実装する方法、またはおそらく別の方法で実装する方法について何か考えはありますか? 前もって感謝します。

4

1 に答える 1

0

あなたがやろうとしていることは次のようになるはずです:

extension ObservableType {

    //E comes from ObservableType itself. You don't have to declare it.
    func waitForDeviceId() -> Observable<E> {
        //flatMap self catching the element (for example mapRect)
        return flatMap { e in
            PCDeviceIdService.shared.deviceIdObservable()
                .map{ _ in e } //map deviceIdObservable back into e
        }
    }

}
于 2018-01-26T09:40:16.980 に答える