Swift-ReactiveCocoa3.0(二)SignalProducer

原创 2015年08月03日 09:07:08

接者上一篇,这里介绍SignalProducer。因为本人也刚接触ReactiveCocoa,不太明白为什么要有Signal和SignalProducer,但其实区别还是很大的。同时更新会有点慢,辛苦各位看官了。

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类型的函数块初始化,订阅时执行该函数,函数内需要sendNextsendCompletedsendError
  • 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>

待续。。。。。。。。。。。

ReactiveCocoa-Swift部分入门指南-SignalProducer

转自:valiantcat 作者:南栀倾寒(博客) 学习过ReactiCocoa(以下简称RAC)的同学一般都会使用Objective-C的部分,不过RAC3之后支持了Swift,目前RAC3....
  • hantian616
  • hantian616
  • 2016年08月12日 16:18
  • 242

Swift-ReactiveCocoa3.0(二)SignalProducer 2

SignalProducer 的 lift、concat、then用法
  • Reese_developer
  • Reese_developer
  • 2015年07月30日 23:02
  • 1133

ReactiveSwift源码解析(八) SignalProducer的代码的基本实现

在前面几篇博客中我们详细的聊了ReactiveSwift中的Bag、Event、Observer以及Signal的使用方式和代码实现。那么在接下来的这几篇博客中,我们就依附于之前博客的基础上来聊一聊S...
  • zy5757
  • zy5757
  • 2017年08月09日 09:58
  • 122

HTTP深入浅出 http请求

HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求...
  • xiaoxiao520c
  • xiaoxiao520c
  • 2017年08月29日 12:41
  • 115

Swift-ReactiveCocoa3.0(一)Signal

环境:XCode6.3.2、swift1.2ReactiveCocoa就不作太多介绍了。 MVVM框架思想网上也有很多介绍:http://www.tuicool.com/articles/Ub2MZ...
  • Reese_developer
  • Reese_developer
  • 2015年07月10日 16:19
  • 1386

ReactiveSwift源码解析(十二) MutableProperty基本代码实现

前两篇博客我们分别聊了ReactiveSwift框架中的负责标记对象的生命周期的类Lifetime以及负责原子性操作的Atomic类的具体代码实现。前两篇博客之所以聊Lifetime以及Atomic的...
  • tiantian12234
  • tiantian12234
  • 2017年08月29日 15:21
  • 184

喷水装置二

/* * 程序的版权和版本声明部分: * Copyright (c) 2014,郑州大学SIAS国际学院 * 作 者: 王 杰 * 完成日期:2014 年 3 月 31 日 ...
  • siaswj
  • siaswj
  • 2014年03月31日 18:24
  • 727

Tyvj 1730 二逼平衡树 (树套树裸题)

题目链接 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某...
  • qq_26564523
  • qq_26564523
  • 2015年08月22日 10:23
  • 461

BZOJ 3196: Tyvj 1730 二逼平衡树|线段树套平衡树

第一次写真正的树套树:线段树套平衡树?!(平衡树套线段树?!) 线段树维护的是区间,然后对于线段树维护的区间的所有数字都维护一个平衡树,然后所有的操作都对每个平衡树单独处理。 比如说操作3,需要先...
  • ws_yzy
  • ws_yzy
  • 2016年02月23日 15:18
  • 660
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Swift-ReactiveCocoa3.0(二)SignalProducer
举报原因:
原因补充:

(最多只允许输入30个字)