- lift
func lift<U, F>(transform: Signal<T, E> -> Signal<U, F>) -> SignalProducer<U, F> 
 运算符 |> 内部也是调用了lift方法,作用是把原producer的结果transform完返回新的类型(或原类型)/值,再封装成新的producer返回。 
 filter、map方法等就是使用这个。 
自定义:
//属性
let age = MutableProperty<String>("0")
//自定义的方法
let stringAsInt: Signal<String,NoError> -> Signal<Int,NoError> = { signal in
            return Signal { sink in
                signal.observe(error: { sendError(sink,$0) },completed: { sendCompleted(sink) },interrupted: { sendInterrupted(sink) },next: { str in
                        sendNext(sink,(str as Nsstring).integerValue) })
                return nil
            }
        }
//调用
self.age.producer.lift(stringAsInt).start(next: { println("Int: \($0)") })
//效果相等于
self.age.producer
    |> stringAsInt
    |> start(next: { println("Int: \($0)") }) 
  
 - concat
func concat<T,E>(next: SignalProducer<T,E>) -> SignalProducer<T,E> -> SignalProducer<T,E> 
 连接两个Producer,只有第一个producer销毁后才响应第二个producer。 
 例子:
//新建两个producer,和观察者sink
let (producer1,sink1) = SignalProducer<String,NoError>.buffer(1)
let (producer2,sink2) = SignalProducer<String,NoError>.buffer(1)
//连接两个producer 
producer1
    |> concat(producer2)
    |> start(next: { println("-> \($0)") })
sendNext(sink1,"I'm first producer")//打印 -> I'm first producer
sendNext(sink1,"I'm first producer")//打印 -> I'm first producer
sendNext(sink2,"I'm second producer")//此处不会打印,因为producer1未销毁
sendCompleted(sink1)//通知producer1已完成并销毁
sendNext(sink2,"I'm second producer")//打印 -> I'm second producer
sendNext(sink1,"I'm Parent")//不打印,因为producer1已销毁 
  
 - then
func then<T,U,E>(replacement: SignalProducer<U,E>) -> SignalProducer<T,E> -> SignalProducer<U,E> 
 作用跟concat差不多,但不会接收第一个producer的next事件。只有在第一个producer销毁后才会响应第二个producer。 
 例子:
//登录信号
let (logInSignal,sink1) = SignalProducer<String,NoError>.buffer(1)
//监控登陆状态信号
let (monitorLogInStatusSignal,sink2) = SignalProducer<String,NoError>.buffer(1)
logInSignal
    |> on(next: { /*保存登陆信息*/ })
    |> then(monitorLogInStatusSignal)//这里并不关心登陆后的用户id,所以用then 
    |> start(next: { println("-> \($0)") })
sendNext(sink1,"Prepare Login...")//不打印,因为不响应第一个producer
sendNext(sink2,"login")//不打印,因为第一个producer未completed
sendCompleted(sink1)//通知登陆完成
sendNext(sink2,"login")//打印 -> login 
sendNext(sink2,"logout")//打印 -> logout 
  
 - combineLatestWith
func combineLatestWith<T, U,E>(otherSignalProducer: SignalProducer<U, E>) -> SignalProducer<T, E> -> SignalProducer<(T, U),E> 
 组合两个信号,当两个都sendNext后才会返回。 
 之后,每当其中一个再sendNext,都会在next回调
- zipwith
func zipwith<T,E> 
 压缩两个信号,每当两个都sendNext一次才回在next回调一次。 
 例子:
let (producer1,NSError>.buffer(1)
        let (producer2,NSError>.buffer(1)
producer1
    |> zipwith(producer2)
    |> start(next: { args in
        println("-> :\(args.0)")
        println("-> :\(args.1)")
            })
sendNext(sink1,"Producer1 say hello world")    //这里不打印,必须两个信号都sendNext
sendNext(sink2,"Producer2 say hello world")//打印
sendNext(sink1,"Producer1 say hello world again")//这里不打印,必须两个信号都sendNext
sendNext(sink2,"Producer2 say hello world again")//打印 
  
 - sampleOn
func sampleOn<T,E>(sampler: SignalProducer<(),NoError>) -> SignalProducer<T,E> -> SignalProducer<T,E> 
 producer1
    |> sampleOn( SignalProducer<(),NoError> { sink,disposable in
    /******* Sample *******/                
    sendNext(sink,())
}) 
 采样,当sampleOn的信号sendNext一次,就取一次producer1的最新一次sendNext的值进行next回调
- takeuntil
|> takeuntil 
 当传入takeuntil的信号sendNext或、sendCompleted后,将原信号设为completed。
- takeuntilReplacement
func takeuntilReplacement<T, E>(replacement: Signal<T, E>) -> Signal<T, E> -> Signal<T, E> 
 返回的信号会响应Next、Error、Interrupted事件。 当传入takeuntilReplacement的信号状态发生任何改变(next、error、completed等)都会disposa返回的信号