前言:
相信使用过ReactCocod 的小伙伴们都对其灵活的事件处理方式赞不绝口,尤其是在MVVP模式的情况下,极大的提高了程序的可读性和简洁性。但随着 swift 的后来居上,越来越多的同行们已经或者正在swift 的坑里一往无前, 原有的 ReactCocod 框架中 处于混编模式的 swift 部分越来越无法满足大众的需求,因此在 RAC 5.0 中 苹果重点 抽取除了 其中的 swift 部分,整理成 ReactSwift 供广大开发者学习使用, swift 特有的点语法 与 ReactSwift 追求的 函数响应式 编程思想 相得益彰,下面就让我们一起来学习 ReactSwift 吧。
正文:
ReactSwift 主要通过 信号流的方式传递事件/值,首先 我们需要创建 信号发生器(SignalProducer), 用于组织管理信号(类似于一场球赛的组织者),由其 创建信号并管理信号的发送传递(组织,开始球赛), 其次 需要创建 信号观察者(Observer),用于观察信号传递过程中值属性的改变或者事件属性的进展(球场的裁判员,时刻关注比方,并观察提示球员的犯规情况), 当管理者把比赛所需场地,人员,等种种 所需准备到位后,就只等 裁判进场,一声令下开始比赛了: SignalProducer.start(Observer),, 具体代码如下
//注意此处必须导入 Result 用于事件结果控制
import ReactiveSwift
import Result
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.testAction()
// Do any additional setup after loading the view, typically from a nib.
}
private func testAction(){
//创建冷信号发生器
let producter = SignalProducer<String,NoError>.init { (observer, _) in
//值信号
print("订阅值信号")
observer.send(value: "宋1")
observer.send(value: "宋2")
}
//创建观察者
let subscriber1 = Signal<String, NoError>.Observer.init(value: { (value) in
print("开始第一个观察\(value)")
}, failed: { (error) in
print("开始第一个观察失败")
}, completed: {
let a = 1
print("\(a)")
}, interrupted: nil)
let subscriber2 = Signal<String, NoError>.Observer.init(value: { (value) in
print("开始第二个观察\(value)")
}, failed: { (error) in
}, completed: {
let a = 2
print("\(a)")
}, interrupted: nil)
//开始启动观察
producter.start(subscriber1)
producter.start(subscriber2)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
输出结果如下:
注意使用cocopods 导入swift 库时,如果总是报错,请检查第三方库的导入版本与当前xcode 支持的 swift 版本是否一致