ObservableObservable<T>就是可观察序列,可以异步地产生一系列的event。
一个Observable<T>对象会随着时间推移不定期地发出event( element: T );
Event可以携带数据,它的泛型<T>用来指定Event携带的数据的类型;
有了可观察序列,还需要有一个Observer来订阅它,这样订阅者才能收到Observable<T>不时发出的Event。
Event Event是一个枚举,表示Observable发出的事件,共有三种类型:
1 2 3 4 5 6 7 8 9 10 public enum Event <Element > { case next(Element ) case error(Swift .Error ) case completed }
next:next事件就是可以携带数据<T>的事件,表示一个正常的事件;
error:error事件表示一个错误,它可以携带具体的错误内容,一旦Observable发出了error event,这个Observable就终止了,以后它再也不会发出event了;
completed:completed事件表示Observable发出的事件正常地结束了,一旦Observable发出了completed event,这个Observable就终止了,以后再也不会发出event了。
Observable与Sequence 联系:一个Observable( ObservableType)相当于一个序列Sequence(SequenceType),ObservableType.subscribe(_:)方法相当于SequenceType.generate()
区别:
swift中的SequenceType是同步的循环,而Observable是异步的;
Observable对象会在有任何Event的时候,自动将Event作为一个参数通过ObservableType.subscribe(_:)发出,并不需要使用next方法。
创建Observable序列的方法 just():通过传入一个默认值来初始化1 let observable = Observable <Int >.just(5 )
of()方法:接收可变数量的参数(同类型)1 let observable = Observable .of("A" ,"B" ,"C" )
from():通过一个数组进行初始化1 let observable = Observable .from(["A" ,"B" ,"C" ])
empty():创建一个空内容的Observable序列1 let observable = Observable <Int >.empty()
never():创建一个永远不会发出event,也不会终止的Observable序列1 let observable = Observable <Int >.never()
error():创建一个直接发送一个错误的Observable序列1 2 3 4 enum MyError : Error { case A ,B } let observable = Observable <Int >.error(MyError .A )
range():通过指定起始和结束数值,创建一个以这个范围内所有值所谓初始值的Observable序列1 2 3 let observable = Observable .range(start:1 , count:5 )let observable = Observable .of(1 ,2 ,3 ,4 ,5 )
repeatElement():创建一个可以无限发出给定元素的Event和Observable序列(永不终止)1 let observable = Observable .repeatElement(1 )
generate():创建一个只有当提供的所有判断条件都为true的时候,才会给出动作的Observable序列1 2 3 4 5 6 7 let observable = Observable .generate(initialState:0 , condition:{ $0 <= 10 }, iterate:{ $0 + 2 } ) let observable = Observable .of(0 ,2 ,4 ,6 ,8 ,10 )
create():接收一个block参数,对每一个过来的订阅进行处理1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 let observable = Observable <String >.create { observer in observer.onNext("next事件数据" ) observer.onCompleted() return Disposables .create() } observable.subscribe{ print ($0 ) } next("next事件数据" ) completed
deferred()该方法相当于创建一个Observable工厂,通过传入一个block来执行延迟Observable序列创建的行为,这个block是真正的实例化序列对象的地方。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 let isOdd = false let factory : Observable <Int > = Observable .deferred { isOdd = ! isOdd if isOdd { return Observable .of(1 ,3 ) }else { return Observable .of(2 ,4 ) } } factory.subscribe { event in print ("\(isOdd) " , event) } factory.subscribe { event in print ("\(isOdd) " , event) } true next(1 )true next(3 )true completedfalse next(2 )false next(4 )false completed
interval()方法该方法创建的Observable序列每隔一段设定的时间,会发出一个索引数的元素,而且会一直发送下去
1 2 3 4 5 6 7 8 9 10 let observable = Observable <Int >.interval(1 ,scheduler:MainScheduler .instance)observable.subscribe { event in print (event) } next(0 ) next(1 ) next(2 ) ...
timer()