RxSwift笔记 - Conditional and Boolean Operators

本文介绍了RxSwift中关键的操作符,包括Amb、Contains、DefaultIfEmpty等,详细解释了它们的功能及使用场景,并通过示例代码展示了如何运用这些操作符进行高效的数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Amb

在多个源 Observables 中, 取第一个发出元素或产生事件的 Observable,然后只发出它的元素

amb.png

let subject1 = PublishSubject<Int>()
let subject2 = PublishSubject<Int>()
let subject3 = PublishSubject<Int>()

subject1
    .amb(subject2)
    .amb(subject3)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

subject2.onNext(1)
subject1.onNext(20)
subject2.onNext(2)
subject1.onNext(40)
subject3.onNext(0)
subject2.onNext(3)
subject1.onNext(60)
subject3.onNext(0)
subject3.onNext(0)

/*
1
2
3
*/

Contains

判定一个 Observable 是否发射一个特定的值

contains.c.png

Observable.of("2", "30", "22", "5", "60", "1").subscribe(onNext: {
    print($0.contains("22"))
}).disposed(by: disposeBag)

/*
false
false
true
false
false
false
*/

DefaultIfEmpty

如果 Observables 为空, 发出默认值

defaultIfEmpty.c.png

Observable.of().ifEmpty(default: 0)
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)

/*
0
*/

SkipUntil

跳过 Observable 中头几个元素,直到另一个 Observable 发出一个元素

屏幕快照 2018-06-03 下午10.33.21.png

let source = PublishSubject<Int>()
let notifier = PublishSubject<Int>()

source.skipUntil(notifier)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

source.onNext(1)
source.onNext(2)
source.onNext(3)
source.onNext(4)
source.onNext(5)

//开始接收消息
notifier.onNext(0)

source.onNext(6)
source.onNext(7)
source.onNext(8)

// 仍然接收消息
notifier.onNext(0)

source.onNext(9)

/*
6
7
8
9
*/

SkipWhile

跳过 Observable 中头几个元素,直到元素的判定为否

skipWhile.c.png

let disposeBag = DisposeBag()

Observable.of(2, 3, 4, 5, 6)
    .skipWhile { $0 < 4 }
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
    }
}

/*
4
5
6
*/

TakeUntil

忽略掉在第二个 Observable 产生事件后发出的那部分元素

屏幕快照 2018-06-03 下午10.35.02.png

let source = PublishSubject<String>()
let notifier = PublishSubject<String>()

source
    .takeUntil(notifier)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

source.onNext("a")
source.onNext("b")
source.onNext("c")
source.onNext("d")

//停止接收消息
notifier.onNext("z")

source.onNext("e")
source.onNext("f")
source.onNext("g")

/*
a
b
c
d
*/

TakeWhile

该方法依次判断 Observable 序列的每一个值是否满足给定的条件。 当第一个不满足条件的值出现时,它便自动完成

takeWhile.c.png

let disposeBag = DisposeBag()

Observable.of(2, 3, 4, 5, 6)
    .takeWhile { $0 < 4 }
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

/*
2
3
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值