RxSwift reload tableview

前端 未结 3 1666
野的像风
野的像风 2020-12-21 07:04
let officialAccountObservable : Observable<[SearchUser]> = SearchAPI.sharedAPI.suggestAccounts()

        officialAccountObservable.bind(to: tableView.rx.items         


        
3条回答
  •  别那么骄傲
    2020-12-21 07:45

    I recommend you to create a Refreshable decorator.

    class Refreshable: ObservableType {
    
        typealias E = T
        func subscribe(_ observer: O) -> Disposable where O.E == E {
            return refreshMeans
                .flatMapLatest{ [unowned self] in
                    return self.origin.asObservable()
                }
                .subscribe(observer)
        }
    
        private let disposeBag = DisposeBag()
        private let origin: Observable
        init(origin: Observable, updatedOn: Observable = .never()) {
            self.origin = origin
            updatedOn.bind(to: refreshMeans).disposed(by: disposeBag)
        }
    
        private let refreshMeans = BehaviorSubject(value: ())
    
        func refresh() {
            refreshMeans.on(.next())
        }
    
    }
    

    wrap your officialAccountObservable into a Refreshable:

    let officialAccountObservable : Refreshable<[SearchUser]> = Refreshable(origin: SearchAPI.sharedAPI.suggestAccounts())
    

    and call refresh when you need to refresh it:

    if(result == true){
        officialAccountObservable.refresh()
    }
    

提交回复
热议问题