gpt4 book ai didi

swift - 如何过滤 combineLatest 仅在一项更改时触发?

转载 作者:可可西里 更新时间:2023-11-01 01:08:10 24 4
gpt4 key购买 nike

我写了如下的小演示代码。我制作了两个不同类型的 PublishSubject。当我更改任何页面触发器时我只需要在 observable_page 发生变化时触发页面。

class ViewController: UIViewController {

func loadData(page: Int, keyword: String) -> Observable<[Int]> {
let _result = Observable.of([1,2,3,4])
return _result
}

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

let observable_keyword = PublishSubject<String>()
let observable_page = PublishSubject<Int>()
let trigger_tap = PublishSubject<Void>()

let tapObservable = trigger_tap.debug("trigger_tap", trimOutput: true)
let stringObservable = observable_keyword.debug("stringObservable", trimOutput: true)
let pageObservable = observable_page.debug("pageObservable", trimOutput: true)

let request_call_trigger = Observable.combineLatest(tapObservable, pageObservable)
.debug("request_call_trigger", trimOutput: true)

let page = request_call_trigger
.withLatestFrom(stringObservable) { ($0, $1) }
.flatMap { ((_, _, page), keyword) in
Observable.combineLatest(Observable.just(page), self.loadData(page: page, keyword: keyword)) { (pageNumber: $0, movies: $1) }
.materialize()
.filter { $0.isCompleted == false }
}
.share()

observable_keyword.onNext("breaking bad")
observable_page.onNext(1)

trigger_tap.onNext(())

observable_keyword.onNext("orange is new black")
observable_keyword.onNext("orange")

}

let bag = DisposeBag()
}

我读了一些选项,觉得过滤器或忽略可能在这里工作,但因为我需要在下一步中使用它们的值,所以很困惑,如何正确应用它。

最佳答案

如果您正在寻找单个触发器,我认为您要寻找的运算符是 withLatestFrom :

observable2
.withLatestFrom(observable1)

意思是:只有当 observable2 发生变化时 - 获取它的最新发射值以及 observable1 的最新发射值。

编辑:如果您需要这两个值,您可能需要提供一个resultsSelector:

observable2
.withLatestFrom(observable1) { ($0, $1) }

关于swift - 如何过滤 combineLatest 仅在一项更改时触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53035733/

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