美文网首页
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