//Variable事件,对某个值需要监控时有“响应式”特性时,可通过Variable来实现
func test10() {
let stringVariable = Variable("Episode1")
let sub1 = stringVariable
.asObservable()
.subscribe {
print("sub1: \($0)")
}
// 设置新值时通过访问value修改
stringVariable.value = "Episode2"
}
// ReplaySubject的行为和BehaviorSubject类似,都会给订阅者发送历史消息,其自带一个缓冲区,当有订阅者订阅时它会向订阅者发送d缓冲区内的所有消息,但是ReplaySubject没有默认消息,订阅空的ReplaySubject不会得到任何消息
func test9() {
//创建时设置缓冲区大小
let subject = ReplaySubject<String>.create(bufferSize: 2)
subject.onNext("Episode1 updated")
subject.onNext("Episode2 updated")
subject.onNext("Episode3 updated")
let sub1 = subject.subscribe(onNext: {
print("Sub1 - what happened: \($0)")
})
let sub2 = subject.subscribe(onNext: {
print("Sub2 - what happened: \($0)")
})
}
//BehaviorSubject和PublisherSubject的唯一区别就是只要有订阅他就会想订阅者发送最新的一次事件作为"试用",
func test8() {
let subject = BehaviorSubject<String>(
value: "RxSwift step by step")
let sub1 = subject.subscribe(onNext: {
print("Sub1 - what happened: \($0)")
})
subject.onNext("Episode1 updated")
let sub2 = subject.subscribe(onNext: {
print("Sub2 - what happened: \($0)")
})
}
//对于事件监听是基于时间来进行的,在监听之前的消息是无法捕获的PublishSubject
func test7() {
let disposeBag = DisposeBag()
let subject = PublishSubject<String>()
subject.onNext("first Action")
let sub1 = subject.subscribe(
onNext: { print($0) }
)
sub1.disposed(by: disposeBag)
subject.onNext("second Action")
let sub2 = subject.subscribe(
onNext: { print($0) }
)
sub2.disposed(by: disposeBag)
subject.onNext("thrid Action")
}
//事件序列的调试
func test6() {
let disposeBag = DisposeBag()
let customOb = Observable<Int>.create { observer in
// next event
observer.onNext(10)
observer.onError(CustomError.somethingWrong)
observer.onNext(11)
// complete event
observer.onCompleted()
return Disposables.create()
}
// debug情况下会在接收到信号前打印发送新号的方法
customOb.debug().subscribe(
onNext: { print("debug: \($0)") },
onError: { print("debug: \($0)") },
onCompleted: { print("debug: Completed") },
onDisposed: { print("debug: Game over") }
).disposed(by: disposeBag)
customOb.do(
onNext: { print("Intercepted: \($0)") },
onError: { print("Intercepted: \($0)") },
onCompleted: { print("Intercepted: Completed") },
onDispose: { print("Intercepted: Game over") }
)
.subscribe(
onNext: { print($0) },
onError: { print($0) },
onCompleted: { print("Completed") },
onDisposed: { print("Game over") }
).disposed(by: disposeBag)
}
//创建自定义事件的序列
func test5() {
let disposeBag = DisposeBag()
let customOb = Observable<Int>.create { observer in
// next event
observer.onNext(10)
observer.onNext(11)
observer.onError(CustomError.somethingWrong)
observer.onNext(12)
// complete event
observer.onCompleted()
return Disposables.create()
}
customOb.subscribe(
onNext: { print($0)},
onError: { print($0)},
onCompleted: { print("Completed") },
onDisposed: { print("Game over") }
).disposed(by: disposeBag)
}
func test4() {
var bag = DisposeBag()
Observable<Int>.interval(1, scheduler: MainScheduler.instance)
.subscribe(
onNext: { print("Subscribed: \($0)") },
onDisposed: { print("The queue was disposed.") })
.disposed(by: bag)
delay(5) {
bag = DisposeBag()
}
}
func test3() {
let disposable = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
.subscribe(onNext: { print("Subscribed: \($0)") },
onDisposed: {print("The queue was Disposed.")})
delay(5) {
disposable.dispose()
}
}
func test2() {
let evenNumberObservable = Observable.of("1", "2","3", "4","5", "6","7", "8","9")
.map{ Int($0) }
.filter ({
if let item = $0, item % 2 == 0 {
print("Even: \(item)")
return true
}
return false
})
_ = evenNumberObservable.subscribe({
event in
print(event)
})
//跳过前两次事件
_ = evenNumberObservable.skip(2).subscribe({
event in
print(event)
})
}
func test1() {
let stringArray = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
let partialFilter = stringArray[4 ..< stringArray.count]
.compactMap{Int($0)}
.filter{
$0 % 2 == 0
}
print(partialFilter)
}
//过滤数组中的偶数
func test0() {
let stringArray = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
let fullFilter = stringArray.compactMap{
Int($0)
}.filter{
$0 % 2 == 0
}
print(fullFilter)
}
网友评论