tig*_*ero 5 ios swift rx-swift
我愿意在使用collectionView时从web服务获取新内容时强制重新加载RxSwift.当我的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)
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的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)
}
}
Run Code Online (Sandbox Code Playgroud)
这是因为在您已经订阅了原始版本之后,正在用全新的self?.newContent = Variable(true)替换:newContent Variable
self.newContentStream = viewModel.newContent.asObservable()
self.newContentStream!.subscribeNext { ......
Run Code Online (Sandbox Code Playgroud)
您的订阅UIView现在正在监听一个Observable没有人会发送Next事件的事件。
Next相反,您应该在当前(且仅)newContent Variable/上发送一个事件Observable:
self?.newContent.value = true
Run Code Online (Sandbox Code Playgroud)
您可以修复它并继续使用 anewContent Variable和 areloadData调用,但是,我不建议这样做。相反,请查看RxDataSources.
| 归档时间: |
|
| 查看次数: |
2649 次 |
| 最近记录: |