gpt4 book ai didi

swift - Rx swift : Zip Observables only if requirements are met

转载 作者:搜寻专家 更新时间:2023-11-01 05:37:25 26 4
gpt4 key购买 nike

想象一个用户配置文件,它允许编辑姓名姓氏年龄avatarImage 等字段。当用户点击 Save 时,系统会针对每个已更改的值发送请求。

现在请考虑具有如下签名的函数:

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

通常我们会像这样压缩这些请求:

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(...)

只想对变化的值执行请求怎么办?

最佳答案

你试过.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():

Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element.

关于swift - Rx swift : Zip Observables only if requirements are met,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35268085/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com