2

namesurnameageavatarImageなどのフィールドを編集できるユーザー プロファイルを想像してみてください。ユーザーが をクリックするSaveと、変更された値ごとにリクエストが送信されます。

次のようなシグネチャを持つ関数を考えてみてください。

func rx_updateUserName(name: String) -> Observable<UpdateUserNameResponse>
func rx_updateSurname(surname: String) -> Observable<UpdateSurnameResponse>
func rx_updateAge(age: Int) -> Observable<UpdateAgeResponse>

通常、zipこれらのリクエストは次のようになります。

let nameReqObservable = rx_updateUserName("Gandalf")
let surnameReqObservable = rx_updateSurname("The White")
let ageReqObservable = rx_updateAge(123)

let zippedRequests = Observable.zip(nameReqObservable, surnameReqObservable, ageReqObservable, 
    resultSelector: { (userNameResponse, surnameResponse, areResponse) in

    return (userNameResponse, surnameResponse, areResponse)
}).subscribeNext(...)

変更された値のリクエストのみを実行したい場合はどうすればよいですか?

4

1 に答える 1

0

試しました.combineLatest()か?ここでの視覚化 - http://rxmarbles.com/#combineLatest あなたの場合、入力オブザーバブルのいずれかで値が変更されるたびに、combinedRequestsオブザーバブルは新しい入力セットを発行します。

let combinedRequests = Observable.combineLatest(nameReqObservable, surnameReqObservable, ageReqObservable, 
    resultSelector: { (userNameResponse, surnameResponse, ageResponse) in

    return (userNameResponse, surnameResponse, ageResponse)
}).subscribeNext(...)

RxSwift のドキュメント.combineLatest():

オブザーバブル シーケンスのいずれかが要素を生成するたびに、セレクター関数を使用して、指定されたオブザーバブル シーケンスを 1 つのオブザーバブル シーケンスにマージします。

于 2016-03-19T23:43:38.820 に答える