如何在 RxSwift 中配置布尔流
How to configure a Bool Stream in RxSwift
当使用 RxSwift
从 Web 服务获取新内容时,我愿意强制重新加载 collectionView
。当我的 onComplete 闭包被正确调用时,我不明白为什么我没有收到带有以下代码的 newContent 事件。
class ListingView : UIView {
var newContentStream: Observable<Bool>?
let disposeBag = DisposeBag()
@IBOutlet weak var collectionView: UICollectionView!
weak var viewModel: ListingViewModel?
func bind(viewModel: ListingViewModel) {
self.viewModel = viewModel
}
func configure() {
guard let viewModel = self.viewModel else { return }
self.newContentStream = viewModel.newContent.asObservable()
self.newContentStream!.subscribeNext { _ in
self.collectionView.reloadData()
}
.addDisposableTo(self.disposeBag)
}
}
然后在我的 viewModel 中:
class ListingViewModel {
let dataSource = ListingViewDataSoure()
var newContent = Variable(false)
func mount() {
let onComplete : ([item]? -> Void) = { [weak self] items in
self?.dataSource.items = items
self?.newContent = Variable(true)
}
guard let URL = API.generateURL() else { return }
Requestor.fetchAll(onComplete, fromURL: URL)
}
}
这是因为 self?.newContent = Variable(true)
正在用一个完全 new Variable
, after[=37= 替换 newContent
] 你已经在这里订阅了原版:
self.newContentStream = viewModel.newContent.asObservable()
self.newContentStream!.subscribeNext { ......
您 UIView
中的订阅现在正在收听一个 Observable
,没有人会发送 Next
事件。
相反,您应该在当前(且仅)newContent
Variable
/Observable
:
发送一个 Next
事件
self?.newContent.value = true
您可以修复它并继续使用 newContent
Variable
和 reloadData
调用,但是,我不建议这样做。相反,查看 RxDataSources
.
当使用 RxSwift
从 Web 服务获取新内容时,我愿意强制重新加载 collectionView
。当我的 onComplete 闭包被正确调用时,我不明白为什么我没有收到带有以下代码的 newContent 事件。
class ListingView : UIView {
var newContentStream: Observable<Bool>?
let disposeBag = DisposeBag()
@IBOutlet weak var collectionView: UICollectionView!
weak var viewModel: ListingViewModel?
func bind(viewModel: ListingViewModel) {
self.viewModel = viewModel
}
func configure() {
guard let viewModel = self.viewModel else { return }
self.newContentStream = viewModel.newContent.asObservable()
self.newContentStream!.subscribeNext { _ in
self.collectionView.reloadData()
}
.addDisposableTo(self.disposeBag)
}
}
然后在我的 viewModel 中:
class ListingViewModel {
let dataSource = ListingViewDataSoure()
var newContent = Variable(false)
func mount() {
let onComplete : ([item]? -> Void) = { [weak self] items in
self?.dataSource.items = items
self?.newContent = Variable(true)
}
guard let URL = API.generateURL() else { return }
Requestor.fetchAll(onComplete, fromURL: URL)
}
}
这是因为 self?.newContent = Variable(true)
正在用一个完全 new Variable
, after[=37= 替换 newContent
] 你已经在这里订阅了原版:
self.newContentStream = viewModel.newContent.asObservable()
self.newContentStream!.subscribeNext { ......
您 UIView
中的订阅现在正在收听一个 Observable
,没有人会发送 Next
事件。
相反,您应该在当前(且仅)newContent
Variable
/Observable
:
Next
事件
self?.newContent.value = true
您可以修复它并继续使用 newContent
Variable
和 reloadData
调用,但是,我不建议这样做。相反,查看 RxDataSources
.