[英]RxSwift subscribe will work when initiated
I am using RxSwift for the first time. 我是第一次使用RxSwift。 It will load Post List from my server. 它将从我的服务器加载帖子列表。 The first time only need to run loadPostList but Just by initializing the model, nextPage is called. 第一次只需要运行loadPostList,但是只需初始化模型,即可调用nextPage。
Please let me know what I'm doing wrong. 请让我知道我在做什么错。
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
accepts an initial value as constructor parameter because its specification is as follows: BehaviorSubject
接受一个初始值作为构造函数参数,因为其规格如下:
Observers can subscribe to the subject to receive the last (or initial) value and all subsequent notifications. 观察者可以订阅主题以接收最后(或初始)值以及所有后续通知。
Meaning nextPage
will trigger a next even on subscription. 这意味着nextPage
甚至会在订阅时触发下一个。 You'll probably want to change all the BehaviorSuject
to PublishSubject
for this class 您可能需要将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)
}
}
Note than I kept pageNo
as a BehaviorRelay
, as it makes sense for this observable to have an initial value. 请注意,我将pageNo
保留为BehaviorRelay
,因为对于这个可观察到的具有初始值是有意义的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.