文章插图
本文将介绍一个响应式编程架构 RxSwift , 并结合使用 Swift 的函数式功能来编写更简洁、更表现力的代码 , 从而管理应用状态及并行任务 。
Swift 及其函数式功能
Swift 可被认为是一种现代的面向对象语言 , 对泛型编程有着原生支持 。虽然它不是一种函数式语言 , 但其中的一些特性却可以让我们利用函数式方式来编程 , 比如可以利用闭包、first-class 类型函数 , 以及不可变的value 类型 。
然而 , Cocoa Touch 是一个面向对象的架构 , 有着这一范式所强制的约束 。软件开发中常见的问题在于如何管理共享应用状态以及异步数据的并行任务 。
函数式编程解决这些问题的办法是 , 赋予不可变状态一定的特权 , 以及将应用逻辑定义为不会在应用生存周期内改变的表达式 。通过定义自包含的函数 , 并行化计算就会变得简单 , 最大程度减少并发问题 。
响应式模型
响应式编程根源于 FRP(函数响应式编程)命令驱动的编程方式 , 是以异步数据流的形式进行编程 。
这可能有些难懂 , 所以最好通过一个简单的例子来大体了解一下 。
表达一个变量间关系
假如有 2 个变量(A 和 B) , 它们的值会在应用运行时中经常改变 。还有一个变量(C) , 它的值取决于前两个变量值 。
2. var B = 20
3. let C = A * 2 + B
4.
5. // 当前值
6. // A = 10, B = 20, C = 40
7.
8. A = 0
9.
10. // 当前值
11. // A = 0, B = 20, C = 40
C 值与 A 和 B 有关 , B 只被当 A 和 B 的赋值操作执行后 , 它们三者之间的关系很快就解散了 。这时再改变 A 与 B 的值 , 将不会对 C 的值有任何影响 。
所以 , 在任何指定时间 , 要想计算表达式 , 就必须根据 A 和 B 的当前值 , 重新指定 C 值 , 重新计算 。
用响应式编程方式该怎么做呢?
采用响应式模式 , 我们将创建两个流 , 来传递 A 或 B 值的改变 。
一般可使用弹珠图来展示这个原理 。如下图所示 , 每一行表示连续的一段时间 , 每一个弹珠表示发生在特定时刻的一个事件 。
Cocoa Touch 中的做法
在 Cocoa Touch 中 , 使用键值对观察 , 为发生改变的变量添加观察者 , 当 KVO 系统通知时再进行处理 。
self.addObserver(self, forKeyPath:”valueA”, options: .New, context: nil)
self.addObserver(self, forKeyPath:”valueB”, options: .New, context: nil)
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
let C = valueA * 2 + valueB
}
如果变量与用户界面相连 , 那么可以在 UIKit 中定义一个当触发变化事件时即被调用的处理器:
sliderA.addTarget(self, action: “update”, forControlEvents: UIControlEvents.ValueChanged)
sliderB.addTarget(self, action: “update”, forControlEvents: UIControlEvents.ValueChanged)
func update() {
let C = sliderA.value * 2 + sliderB.value
}
但是 , 对于调用的变量、它们的生存周期以及改变它们值的事件 , 以上两种方法都没有定义一种持久、显式的关系 。
我们可以用响应式编程模式来处理这种情况 。当前对于 OS X 和 iOS 开发者而言 , 有多种不同的实现 , 比如 RxSwift 和 ReactiveCocoa 。
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- 假如把王者荣耀和直销两用户运营模式调换,会发生什么?
- 亚奥理事会正式允许什么为杭州亚运会会徽
- 家庭教养方式有哪些类型
- 男女朋友怎样相爱 哪种恋爱模式好
- map集合遍历的三种方式 map怎么遍历删除
- 电脑版万能播放器安装 爱奇艺万能视频播放器可以播放的格式
- 1分钟教你c语言数组初始化赋值 c语言字符数组初始化的三种方式
- 如何制作广式卤猪大肠 怎么制作广式卤猪大肠
- 产品推广方式都有哪些 产品如何推广
- 数据库常用sql语句 sql语句格式化时间格式