Home telegram - swiftsignalkit
Post
Cancel

telegram - swiftsignalkit

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以及由gneratorsubscriber作用产生的dispoable的引用

Subscriber (订阅者)

订阅Signal,处理接收到的事件

  • subscriber自身引用一个由generator对其作用产生的dispoable

  • var disposable

  • 表示自己在订阅

取消订阅

  • subscriber 接收到StopEvents(complete, error)会将自身的event handles置空,把其引用的disposable置空,并把自己的状态改为terminated, 表示不再处理订阅事件

  • 并调用所引用的disposabledispose方法,

  • 而这个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 a signal

  • right operand should be a signal handler that produces another signal

newSignal 触发 |激活 | 有订阅产生

  • predSignal 产生一个订阅 | 激活preSignal

  • newSignal的特性会在preSignal基础上去体现

  • newSignal的订阅产生的disposable & SubscriberDisposable 包含 对preSignal订阅产生的disposable & SubscriberDisposable 的引用

  • disposable chain

关于PipeRight |>

  • pipe的操作实现,实际上构建的是一条信号链
  • 在使用中你可以理解为改变originSignal的特性

signal_disposable_chain

这里会结合项目中的使用来说明

This post is licensed under CC BY 4.0 by the author.