变换操作符:buffer、window、map、flatMap、

2018-09-05  本文已影响49人  FallPine
let subject = PublishSubject<String>()
 
//每缓存3个元素则组合起来一起发出。
//如果1秒钟内不够3个也会发出(有几个发几个,一个都没有发空数组 [])
subject
    .buffer(timeSpan: 1, count: 3, scheduler: MainScheduler.instance)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
 
subject.onNext("a")
subject.onNext("b")
subject.onNext("c")
         
subject.onNext("1")
subject.onNext("2")
let subject = PublishSubject<String>()
         
//每3个元素作为一个子Observable发出。
subject
    .window(timeSpan: 1, count: 3, scheduler: MainScheduler.instance)
    .subscribe(onNext: { [weak self]  in
        print("subscribe: \($0)")
        $0.asObservable()
            .subscribe(onNext: { print($0) })
            .disposed(by: self!.disposeBag)
        })
        .disposed(by: disposeBag)
         
subject.onNext("a")
subject.onNext("b")
subject.onNext("c")
         
subject.onNext("1")
subject.onNext("2")
let disposeBag = DisposeBag()
 
Observable.of(1, 2, 3)
    .map { $0 * 10}
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
let subject1 = BehaviorSubject(value: "A")
let subject2 = BehaviorSubject(value: "1")
        
let variable = Variable(subject1)
        
variable.asObservable()
    .flatMap { $0 }
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
        
subject1.onNext("B")
variable.value = subject2
subject1.onNext("C")
let subject1 = BehaviorSubject(value: "A")
let subject2 = BehaviorSubject(value: "1")
 
let variable = Variable(subject1)
 
variable.asObservable()
    .concatMap { $0 }
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
 
subject1.onNext("B")
variable.value = subject2
subject2.onNext("2")
subject1.onNext("C")
subject1.onCompleted() //只有前一个序列结束后,才能接收下一个序列
Observable.of(1, 2, 3, 4, 5)
    .scan(0) { acum, elem in
        acum + elem
    }
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
//将奇数偶数分成两组
Observable<Int>.of(0, 1, 2, 3, 4, 5)
    .groupBy(keySelector: { (element) -> String in
        return element % 2 == 0 ? "偶数" : "基数"
    })
    .subscribe { (event) in
        switch event {
        case .next(let group):
            group.asObservable().subscribe({ (event) in
            print("key:\(group.key)    event:\(event)")
        })
            .disposed(by: self.disposeBag)
        default:
             print("")
        }
    }
    .disposed(by: disposeBag)

参考文章:Swift - RxSwift的使用详解8(变换操作符:buffer、map、flatMap、scan等)

上一篇 下一篇

猜你喜欢

热点阅读