RxSwift设计用于异步请求

时间:2018-04-01 23:03:56

标签: swift asynchronous rx-swift urlsession

我是RxSwift的新手,试图找出实现以下目标的最简单方法:

  • 首次登录应用后, getData '请求已完成。这些数据很关键,将被加载到微调器后面。收到后,数据将保存在Core Data数据库中。当此任务完成时(使用完成块),将启动下一个应该在后台异步运行的请求,此处的数据也会保存在数据库中。如果访问呈现后一数据的视图并且尚未从db接收和提取数据,则应显示微调器。

模型

please take a look of edited code for h1

    body
  height: 2000px
  nav
    border: 1px solid black
    width: 100vw
    margin: 0 auto
    position: fixed
    ul
      text-align: center
      font-size: 0
      li
        display: inline-block
        padding: 3vh 6vw
        &:hover
          cursor: pointer
        a
          font-size: calc(20px + (30 - 20) * ((100vw - 300px) / (1600 - 300)))
          text-decoration: none
          color: gray
h1
  padding-top: 10vh
  font-size: 50px
  position: fixed
  left: 0

的ViewController

let subject = ReplaySubject<[MyObject]>.create(bufferSize: 3)
var observable : Observable<[MyObject]>?

 init() {
        self.observable = subject
 }
 ...

 self?.insertFirstDataToDb(firstData){
   self?.api.getNextData(param,  success: { (data) -> Void in
    self?.insertNextDataToDb(firstData)

  })
  ... 
}

我想这可以在不使用RxSwift的情况下完成,是否会出现任何性能问题?有任何建议如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

要启动和停止微调器,您可以分别使用onSubscribed运算符的onNextdo闭包。

要一个接一个地引导多个请求,我建议使用flatMapLatest运算符。对于一个好的设计,您可以为请求开发decorator,以便在订阅请求时启动微调器。