Swift-ReactiveCocoa3.0(二)SignalProducer
2015-08-03 09:07
441 查看
接者上一篇,这里介绍SignalProducer。因为本人也刚接触ReactiveCocoa,不太明白为什么要有Signal和SignalProducer,但其实区别还是很大的。同时更新会有点慢,辛苦各位看官了。
SignalProducer:
初始化
buffer:
startWithSignal:
开始当前信号之前先执行函数块,之后当signalProducer发送的所有事件都会同步发送到signal,说起来难以理解,上代码:
start后执行首先startWithSignal的函数块订阅事件,再执行startHandler,发送两次next:,startWithSignal内的signal能收到两次事件并打印
注:如果startWithSignal的disposable被disposed了,就不会执行startHandler
lift
concat
待续。。。。。。。。。。。
SignalProducer:
初始化
SignalProducer<T, E: ErrorType> //跟Signal一样初始化需要带两个范型
public init(value: T) //根据指定的值初始化,订阅时马上sendNext和sendCompleted
public init(error: E)//根据错误初始化,订阅时马上sendError
public init(_ startHandler: (Signal<T, E>.Observer, CompositeDisposable) -> ()) //常用,根据带有一个参数为observer类型,另一个为disposable类型的函数块初始化,订阅时执行该函数,函数内需要sendNext、sendCompleted、sendError
buffer:
public static func buffer(_ capacity: Int = Int.max) -> (SignalProducer, Signal<T, E>.Observer) //创建SignalProducer和Observer,并根据capacity的数量缓存每次发送的事件Event,每次订阅都重新发送所有事件 /* 不知道有没有理解错,总之不知道有什么用,如果capacity为1就相当于Signal的pipe */
startWithSignal:
public func startWithSignal(@noescape setUp: (Signal<T, E>, Disposable) -> ()) //
开始当前信号之前先执行函数块,之后当signalProducer发送的所有事件都会同步发送到signal,说起来难以理解,上代码:
let signalProducer = SignalProducer<String, NSError> { observer, disposable in sendNext(observer, "from signalProducer") sendNext(observer, "from signalProducer 2") sendCompleted(observer) } signalProducer |> startWithSignal { signal, disposable in signal.observe(next: { println($0) }) }
start后执行首先startWithSignal的函数块订阅事件,再执行startHandler,发送两次next:,startWithSignal内的signal能收到两次事件并打印
注:如果startWithSignal的disposable被disposed了,就不会执行startHandler
from signalProducer from signalProducer2
lift
public func lift<U, F>(transform: Signal<T, E> -> Signal<U, F>) -> SignalProducer<U, F> 将SignalProducer按transform转换出新的Producer,如filter、map。
concat
public func concat<T, E>(next: SignalProducer<T, E>) -> SignalProducer<T, E> -> SignalProducer<T, E>
待续。。。。。。。。。。。
相关文章推荐
- Linux 信号signal处理机制
- Apple Swift学习教程
- RAC cache fusion机制实现原理分析
- ASP.NET小结之MVC, MVP, MVVM比较以及区别(一)
- oracle 11g RAC 常用命令整理分享
- Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍
- Swift中定义二维数组的方法及遍历方法示例
- [Oracle] RAC 之 - 负载均衡深入解析
- Oracle11g RAC开启关闭、设置归档小结
- perl中使用signal(信号)实例
- MVVM模式中ViewModel和View、Model有什么区别?
- 简单分析Swift语言的一些基本特征
- Swift与C语言指针结合使用实例
- Swift心得笔记之控制流
- ASP.NET小结之MVC, MVP, MVVM比较以及区别(二)
- 用Swift构建一个简单的iOS邮件应用的方法
- 苹果公司推出的新编程语言Swift简介和入门教程
- 教你如何在Django 1.6中正确使用 Signal
- Swift中的指针操作和使用详细介绍