RXSwift - 如何召回 api

RXSwift - How to recall an api

我为 api 调用创建了一个可观察对象并绑定到一个表视图。现在我不清楚 如何再次调用相同的 api?以便进行刷新 - 比如说点击按钮?。以下是我的示例代码。

请告诉我您的想法,这会对您有所帮助

 var items : Observable<[String]>? 
   func viewDidLoad(){

            items = fetchAllAnswers()
          items.bindTo(....).addDisposableTo(bag)
    }
   func fetchAllAnswers() -> Observable<[String]>{
   let api = Observable.create { (obsever: AnyObserver<[String]>) -> Disposable in
        let answers = API.allAnswers()
                     obsever.onNext(answers)
                     obsever.onCompleted()
                    return AnonymousDisposable{
                        print("api dispose called")
                    }
                }
                return api

            }

    func onClickRefresh()
   {
   // how to call api here again?


   //  let items = fetchAllAnswers() 
    // items.bindTo(....).addDisposableTo(bag)

   }

很简单。您可以使用变量来更新您的项目:

let items =  Variable([String]())

接下来您必须将项目与您的 UITableView 绑定:

items.asObservable.bindTo(....).addDisposableTo(bag)

接下来您可以在订阅者中更新您的项目:

fetchAllAnswers()
.subscribeNext { stringArray in 
    items.value = stringArray
}
.addDisposableTo(bag)

如果您想通过单击按钮更新 table,您可以执行下一步操作:

yourButton.rx_tap
.flatMap { void -> Observable<[String]> in
    return fetchAllAnswers()
}
.subscribeNext { stringArray in 
    items.value = stringArray
}
.addDisposableTo(bag)
func viewDidLoad() {
  button.rx_tap.startWith().flatMap { _ in
    fetchAllAnswers()
  }.bindTo(...).addDisposableTo(bag)
}

flatMap 会将 taps 转换为可观察闭包 returns 的结果,这里是一个 String 数组。

startWith() 将强制 rx_tap 在订阅时发出第一个值,以便保持第一个刷新行为。