git clone
我想在代码中重新加载表视图(result == true) 对于重新加载,必须收到OfficialAccountObservable。 我的代码全部结束,我想知道如何在该状态下更新它。
答案 0 :(得分:3)
AFAIK,这是执行此操作的标准方式 -
let source = PublishSubject<Observable<[SearchUser]>>()
let officialAccountObservable: Observable<[SearchUser]> = source.switchLatest()
source.onNext(suggestAccounts()) // every call will refresh your table
答案 1 :(得分:0)
我建议您创建一个Refreshable
装饰器。
class Refreshable<T>: ObservableType {
typealias E = T
func subscribe<O:ObserverType>(_ 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<T>
init(origin: Observable<T>, updatedOn: Observable<Void> = .never()) {
self.origin = origin
updatedOn.bind(to: refreshMeans).disposed(by: disposeBag)
}
private let refreshMeans = BehaviorSubject<Void>(value: ())
func refresh() {
refreshMeans.on(.next())
}
}
将officialAccountObservable
打包成Refreshable
:
let officialAccountObservable : Refreshable<[SearchUser]> = Refreshable(origin: SearchAPI.sharedAPI.suggestAccounts())
并在需要刷新时调用refresh:
if(result == true){
officialAccountObservable.refresh()
}
答案 2 :(得分:0)
我认为你现在遇到的问题是当你创建一个进行Alamofire调用的observable时,它只会被执行一次,因为你无法再打一次电话。
您可能想要做的事情就像Maxim Volgin建议的那样:使用主题。
主题同时是输入和输出。在您的情况下,输出将是您的tableview的数据,您将像现在一样绑定它。
然后,使用pull刷新或其他适合重新加载的机制来进行Web服务调用并将结果发布给主题(然后将更新您的tableview)。
请记住,主题还会将onError和onComplete调用填充到观察者,因此请确保在将结果发布到主题之前处理Web服务调用中的可能错误。
我发现这个网站对于更好地理解RxSwift非常有帮助:http://swiftpearls.com/
你应该检查一下。特别是RxSwift for Dummies非常适合对事物的运作方式有基本的了解。