如何检查 RXSwift 中的 observable 是不是为空?
Posted
技术标签:
【中文标题】如何检查 RXSwift 中的 observable 是不是为空?【英文标题】:How to check if an observable is empty in RXSwift?如何检查 RXSwift 中的 observable 是否为空? 【发布时间】:2019-09-18 11:35:22 【问题描述】:我已经像这样初始化了一个空的 observable:
var subCategories = Observable<[String]>.empty()
如何检查 observable 是否为空?如果可观察对象为空,我想向用户显示“空视图”,否则在 tableview 中显示数据。
【问题讨论】:
Empty Observable 指的是 Observable 发出单个onComplete
。你描述的用例应该用一个 Observable 来实现,它发出 [String]
长度从 0 到 n。
【参考方案1】:
创建一个 bool Observable 来显示/隐藏您的 emptyView:
let hideEmptyView = subCategories.map!$0.isEmpty
然后将此hideEmptyView
Bool Observable 绑定到yourEmptyView.rx.isHidden
【讨论】:
【参考方案2】:你必须在 Observable 上使用过滤器:
viewModel.filteredUsers.asObservable()
.filter( [weak self] array in
guard let self = self else return true
if array.isEmpty
self.emptyListContainer.alpha = 1
self.tableView.alpha = 0
else
self.emptyListContainer.alpha = 0
self.tableView.alpha = 1
return true
)
.bind(to: tableView.rx.items(cellIdentifier: "ContactsTableViewCell", cellType: ContactsTableViewCell.self)) (row, user, cell) in
cell.titleLbl.text = user.name
.disposed(by: disposeBag)
【讨论】:
【参考方案3】:使用 BehaviourRelay 而非 Observable。
import RxCocoa
import RxSwift
var subCategories = BehaviorRelay<[String]>(value: [])
let emptyView = UIStackView()
func addObservers()
subCategories.asObservable().subscribe _ in
self.emptyView.isHidden = !self.subCategories.value.isEmpty
.disposed(by: DisposeBag())
【讨论】:
以上是关于如何检查 RXSwift 中的 observable 是不是为空?的主要内容,如果未能解决你的问题,请参考以下文章
如何检查 RXSwift 中的 observable 是不是为空?
使用 RXSwift 的警报消息的 UIViewController 扩展