美文网首页
RxSwift学习笔记(1) -简单实现

RxSwift学习笔记(1) -简单实现

作者: Dev端 | 来源:发表于2016-05-18 22:50 被阅读406次

    简单的Observable Sequence实现:


    _ = Observable<String>.create({ (observerOfString) -> Disposable in
            print("Observable created")
            observerOfString.on(.Next("😉"))
            observerOfString.on(.Completed)
            return NopDisposable.instance
        }).subscribe({ (event) in
            print(event)
        })
    

    subscribe(: )会返回Disposable实例, 一般会把它处理掉, 由此介绍了DisposeBag这个类型, 感觉是相当于@autoReleasePool, 一条信号在完结的时候, 总要回收的嘛:

    let disposeBag = DisposeBag()
    Observable<Int>.empty()
            .subscribe { event in
                print(event)
            }
            .addDisposableTo(disposeBag)
    

    创建Observable Sequence的各种API


    创建有且只有单个元素的Sequence
    Observable.just("SingleElement")
    
    创建固定数量多个元素的Sequence
    Observable.of("🐶", "🐱", "🐭", "🐹")
    
    创建一个范围的元素组成的Sequence
    Observable.range(start: 1, count: 10)
    
    创建重复元素组成的Sequence
    Observable.repeatElement("🔴")        
       .take(3)
    

    这里的调用take代表repeat3次.

    自定义某个range构成的Sequence, 自己加其中过滤条件
    Observable.generate(
            initialState: 0,
            condition: { $0 < 3 },
            iterate: { $0 + 1 }
        )
    
    用<SequenceType>来创建Observable Sequence.
    ["🐶", "🐱", "🐭", "🐹"].toObservable()
    
    Empty Sequence只发送一个complete事件
    Observable<Int>.empty()
    
    Error Sequence只发送一个Error事件.
    Observable<Int>.error(Error.Test)
    
    Never Sequence 永远不会发送事件
    Observable<String>.never()
    

    手动创建Sequence构成方法


    let myJust = { (element: String) -> Observable<String> in
        return Observable.create { observer in
            observer.on(.Next(element))
            observer.on(.Completed)
            return NopDisposable.instance
        }
    }
    myJust("🔴")
        .subscribe { print($0) }
    

    创建生产Sequence的工厂方法


    let deferredSequence = Observable<String>.deferred {    
        return Observable.create { observer in
            print("Emitting...")
            observer.onNext("🐶")
            observer.onNext("🐱")
            observer.onNext("🐵")
            return NopDisposable.instance
        }
    }
    

    每一个subscribe了defferedSequence的监听者监听的都是单独的信号, 意思就是每监听一次调一次工厂方法创建新的信号.

    监听的类型和不同写法


    Subscribe除了Subscrilbe(:)一锅端之外也可以是Subscribe单个种类的Event

    .subscribeNext { element in
        print(element)
    }
    

    同样还有subscribeError(_:)subscribeCompleted(_:), 或者用混合模式: subscribe(onNext:onError:onCompleted:onDisposed:)

    someObservable.subscribe(
        onNext: { print("Element:", $0) },
        onError: { print("Error:", $0) },
        onCompleted: { print("Completed") },
        onDisposed: { print("Disposed") }
    )
    

    顺便做做"doOn"


    Observable.of("🍎", "🍐", "🍊", "🍋")
        .doOn { print("Intercepted:", $0) }
        .subscribeNext { print($0) }
        .addDisposableTo(disposeBag)
    

    doOn可以在整个Sequence的任何位置调用, 可以提取当前位置传递进来的Event类型, 做一些操作 ! 同时也有细分出来的doOnNext(_:), doOnError(_:), doOnCompleted(_:)方法.

    Referece:
    https://github.com/ReactiveX/RxSwift/tree/master/Rx.playground
    https://github.com/ReactiveX/RxSwift/tree/master/Documentation

    相关文章

      网友评论

          本文标题:RxSwift学习笔记(1) -简单实现

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