Observable
Observable<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()