如何在RXSwift中检查Observable是否为空?

ut6juiuv  于 2023-11-16  发布在  Swift
关注(0)|答案(4)|浏览(102)

我初始化了一个空的observable,如下所示:

var subCategories = Observable<[String]>.empty()

字符串
如何检查observable是否为空?如果observable为空,我希望向用户显示“空视图”,否则在tableview中显示数据。

g2ieeal7

g2ieeal71#

创建一个bool Observable来显示/隐藏emptyView:

let hideEmptyView = subCategories.map{!$0.isEmpty}

字符串
然后将此hideEmptyView Bool Observable绑定到yourEmptyView.rx.isHidden

wsewodh2

wsewodh22#

你必须在Observable上使用filter:

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)

字符串

ugmeyewa

ugmeyewa3#

一种解决方案是
第一个月

sqserrrh

sqserrrh4#

使用Observable以外的BehaviourRelay

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())
}

字符串

相关问题