美文网首页
RxSwift学习

RxSwift学习

作者: 浪淘沙008 | 来源:发表于2019-11-04 11:02 被阅读0次
 //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)
    }

相关文章

网友评论

      本文标题:RxSwift学习

      本文链接:https://www.haomeiwen.com/subject/zhclbctx.html