繁体   English   中英

RxSwift订阅启动后将起作用

[英]RxSwift subscribe will work when initiated

我是第一次使用RxSwift。 它将从我的服务器加载帖子列表。 第一次只需要运行loadPostList,但是只需初始化模型,即可调用nextPage。

请让我知道我在做什么错。

class PostNetworkModel {
    var nextPage:BehaviorSubject<Void> = BehaviorSubject(value: ())
    var reFresh:BehaviorSubject<Void> = BehaviorSubject(value: ())
    var raiseError:BehaviorSubject<Void> = BehaviorSubject(value: ())
    var isLoadingComplete = false
    private var pageNo = BehaviorRelay(value: 1)
    var postList : BehaviorRelay<[Post]> = BehaviorRelay(value: [])
    let disposeBag = DisposeBag()
    init() {
        loadPostList()
            .bind(to: postList)
            .disposed(by: disposeBag)

        postList
            .asObservable()
            .subscribe({ ( _) in
                self.isLoadingComplete = true
            })
            .disposed(by: disposeBag)

        nextPage
            .asObservable()
            .subscribe(onNext: { [weak self] ( _) in
                print("nextPage")
                if (self?.isLoadingComplete)!{
                    self?.isLoadingComplete = false
                    self?.pageNo.accept(self!.pageNo.value + 1)
                }
            })
            .disposed(by: disposeBag)
     }
}

BehaviorSubject接受一个初始值作为构造函数参数,因为其规格如下:

观察者可以订阅主题以接收最后(或初始)值以及所有后续通知。

这意味着nextPage甚至会在订阅时触发下一个。 您可能需要将PublishSubject所有BehaviorSuject更改为PublishSubject

class PostNetworkModel {
    var nextPage:PublishSubject<Void> = PublishSubject()
    var reFresh:PublishSubject<Void> = PublishSubject()
    var raiseError:PublishSubject<Void> = PublishSubject()
    var isLoadingComplete = false
    private var pageNo = BehaviorRelay(value: 1)
    var postList : PublishRelay<[Post]> = PublishRelay()

    let disposeBag = DisposeBag()
    init() {
        loadPostList()
            .bind(to: postList)
            .disposed(by: disposeBag)

        postList
            .asObservable()
            .subscribe({ ( _) in
                self.isLoadingComplete = true
            })
            .disposed(by: disposeBag)

        nextPage
            .asObservable()
            .subscribe(onNext: { [weak self] ( _) in
                print("nextPage")
                if (self?.isLoadingComplete)!{
                    self?.isLoadingComplete = false
                    self?.pageNo.accept(self!.pageNo.value + 1)
                }
            })
            .disposed(by: disposeBag)
     }
}

请注意,我将pageNo保留为BehaviorRelay ,因为对于这个可观察到的具有初始值是有意义的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM