gpt4 book ai didi

ios - 如何在 RxSwift 中配置 bool 流

转载 作者:搜寻专家 更新时间:2023-10-31 08:04:36 24 4
gpt4 key购买 nike

当使用 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) 正在用一个完全 Variable 替换 newContent >,之后您已经在此处订阅了原件:

self.newContentStream = viewModel.newContent.asObservable()
self.newContentStream!.subscribeNext { ......

您的 UIView 中的订阅现在正在监听一个 Observable,没有人会发送 Next 事件。

相反,您应该在当前(且仅)newContent Variable/Observable Next 事件:

self?.newContent.value = true

您可以修复它并继续使用 newContent VariablereloadData 调用,但是,我不建议这样做这个。相反,请查看 RxDataSources .

关于ios - 如何在 RxSwift 中配置 bool 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39047603/

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