Signal(信号)
Signal.swift
接受订阅, 发出事件,通知订阅者
实际上就是直接调用接受者的事件处理的接口,跟回调其实是一样的
let generator| 构造的时候决定信号的特性
1 (Subscriber<T, E>) -> Disposable & SubscriberDisposable###表明会对把什么样的事件怎样发送给订阅者 |
What and How
##Events
next(T)
新的T到来
complete
事件流结束, a stop event
error(E)
错误E发生, a stop event接受订阅的接口
1 start(next: ((T) -> Void)! = nil, error: ((E) -> Void)! = nil, completed: (() -> Void)! = nil) -> Disposable
这里会创建一个
subscriber
, 并且在它上调用generator
也就是说,订阅者提供event handler就能完成订阅
如何维护订阅者,比如如何取消订阅
1 `Disposable` | 订阅产生, start方法将返回一个SubscriberDisposable包含对
Subscriber
以及由gnerator
对subscriber
作用产生的dispoable
的引用
Subscriber (订阅者)
订阅Signal,处理接收到的事件
subscriber
自身引用一个由generator
对其作用产生的dispoable
即 var disposable
表示自己在订阅
取消订阅
subscriber
接收到StopEvents(complete
,error
)会将自身的event handles
置空,把其引用的disposable
置空,并把自己的状态改为terminated, 表示不再处理订阅事件并调用所引用的
disposable
的dispose
方法,而这个
disposable
是由generator
返回的,也就是说如何dispose
也是signal
的特性
可以发现,所有将发出 Stop Events
的信号,通常订阅将产生一个EmptyDisposable
不做任何事情, 当然这不是必须的,可以是返回任意disposable - 对于不会发出
stop events
的信号,则需要外部对disposable
引用,主动调用其dispose
方法进行取消
infix operator |> : PipeRight
1
func |> <T, U>(value: T, function: ((T) -> U)) -> U
infix operator
left
operand should be asignal
right
operand should bea signal handler that produces another signal
当
newSignal
触发 |激活 | 有订阅产生
对
predSignal
产生一个订阅 | 激活preSignal
;
newSignal
的特性会在preSignal
基础上去体现对
newSignal
的订阅产生的disposable & SubscriberDisposable
包含 对preSignal
订阅产生的disposable & SubscriberDisposable
的引用
disposable chain
关于PipeRight |>
- pipe的操作实现,实际上构建的是一条信号链
- 在使用中你可以理解为改变originSignal的特性
这里会结合项目中的使用来说明