Operation之其他实用操作符

delay

  • 该操作符会将 Observable 的所有元素都先拖延一段设定好的时间, 然后才将他们发送出来
Observable.of(1,2,3,4)
    .delay(5, scheduler: MainScheduler.instance)
    .subscribe(onNext: { print($0) })
    .disposed(by: bag)

delaySubscription

  • 该操作符可以进行延时订阅. 即经过所设定的时间后, 才对Observable进行订阅操作
Observable.of(1,2,3,4)
    .delaySubscription(3, scheduler: MainScheduler.instance)
    .subscribe(onNext: { print($0) })
    .disposed(by: bag)

materialize

  • 该操作符可以将序列产生的事件, 转换成元素
  • 通常一个有限的Observable将产生0个或者多个onNext事件, 最后产生一个onCompleted或者onError事件. 而materialize操作符会将Observable产生的这些事件全部转换成元素, 然后发送出来
Observable.of(1,2,3,4)
    .materialize()
    .subscribe(onNext: { print($0) })
    .disposed(by: bag)

dematerialize

  • 该操作符的作用和materialize正好相反, 它可以将materialize转换后的元素还原
Observable.of(1,2,3,4)
    .materialize()
    .dematerialize()
    .subscribe(onNext: { print($0) })
    .disposed(by: bag)

timeout

  • 使用该操作符可以设置一个超时时间. 如果源Observable在规定时间内没有发生任何元素, 就产生一个超时的error事件

let times = [
["value": 1, "time": 0],
["value": 2, "time": 0.5],
["value": 3, "time": 1.0],
["value": 4, "time": 1.5],
["value": 5, "time": 5],
["value": 6, "time": 6]]

Observable.from(times)
    .flatMap { item in
        return Observable.of(Int(item["value"]!))
            .delaySubscription(Double(item["time"]!), scheduler: MainScheduler.instance)
}
    .timeout(2, scheduler: MainScheduler.instance) // 超过2秒没有发出元素, 则产生error事件
    .subscribe(onNext: { print($0) }, onError: {print($0)})
    .disposed(by: bag)

猜你喜欢

转载自www.cnblogs.com/gchlcc/p/11975457.html