Swift-ReactiveCocoa3.0(一)Signal
环境:XCode6.3.2、swift1.2 ReactiveCocoa就不作太多介绍了。 ReactiveCocoa已发展到3.0版本,相对2.x有较大改变,特别加入Swift的支持,所以特此记录下来。 1、信号-Signal
//创建信号和观察者
let (signal,observer) = Signal<String?,NoError>.pipe()
//创建一个信号,一个观察者(Observer类型后面介绍)
Signal的用法跟OC版的差不多,只是结合了Swift的语法特点,通过重载运算符
//转换为一个新值
|> map { text in return (text as String).uppercaseString }
|> filter { text in return count(text as String) > 3 }
|> ignoreNil
|> take(2) //若为0,则不执行next:,直接completed:
|> collect
|> skip(3) 跳过3次next:只执行第四次
|> delay(2,onScheduler: QueueScheduler()) //切换到指定线程 延迟2秒执行next:、completed:
|> observeOn(UIScheduler()) //将next:、error:、completed:等事件执行在主线程/子线程
|> observe()
//error:调用了sendError
//completed:调用了completed
//interrupted:调用了sendInterrupted
//next:调用了sendNext
sendError(observer,NSError(domain: "",code: 404,userInfo: ["result":"Not Found"]))
通知观察者有错误发生
sendNext(observer,"New Value")
注:必须是Signal创建时的第一个类型
sendInterrupted(observer)
sendCompleted(observer)
|> materialize //sendError转为sendCompleted
|> dematerialize //看了源码应该是当sendError时抛错中断程序
2、观察者-Observer public func sendNext<T,E: ErrorType,S: SinkType where S.Element == Event<T,E>>(var sink: S,value: T) {
sink.put(.Next(Box(value)))
}
sink就是sendNext(observer,“”)中的observer。 好了,大概介绍得差不多,还有几个没看懂的 以后再补上。 以上个人笔记、转载请出名出处。谢谢! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |