IOS函数响应式编程开发简析

Posted 宜信大数据创新中心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS函数响应式编程开发简析相关的知识,希望对你有一定的参考价值。

函数响应式编程(Function Reactive Programming,以下简称FRP)是一种结合了函数式编程和响应式编程的编程范式,应用于移动端开发中能极大的简化开发流程,降低项目的耦合性。本文基于ios开发介绍函数响应式编程,旨在让大家对FRP有一个清晰的了解。

什么是FRP?

IOS函数响应式编程开发简析

函数式编程

函数式编程是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。对比命令式编程,函数式编程更加强调程序执行的结果而非执行的过程,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算,而不是设计一个复杂的执行过程。对比面向对象编程,函数式编程强调让数据围绕操作,通过对数据进行多种简单的操作,获得结果。


在函数式编程中,函数是第一等公民,即函数和其他数据类型一样处于平等地位。函数式编程强调没有副作用,所有功能就是返回一个新的值,没有其他行为,尤其是不得修改外部变量的值,这十分有利于编写单元测试。另外在函数是编程中不修改变量,即函数中不保留中间状态,对于每一次相同的输入都得出相同的输出,非常有利于并发编程。

响应式编程(反应式编程)

响应式编程是一种面向数据流和变化传播的编程范式,数据更新是相关联的。比如很多时候,在写界面的时候,我们需要对事件做处理,伴随着前端事件的增多,对于事件的处理愈发需要更加方便的处理。


把函数范式和响应式编程合起来就是函数响应式编程。

IOS函数响应式编程开发简析

ReactiveCocoa

IOS函数响应式编程开发简析

ReactiveCocoa(简称为 RAC)是由 Github 开源的一个应用于 iOS 和 mac OS开发的新框架,RAC 具有函数响应式编程的特性。它主要吸取了 .Net 的 Reactive Extensions 的设计和实现。


ReactiveCocoa由两大主要部分组成:signals (RACSignal)和 sequences (RACSequence)。signal 和 sequence 都是继承于streams。signal是push驱动的stream,sequence是pull驱动的stream。

RACSignal

RACSignal会触发它的subscriber三种不同类型的事件:next事件表示发送一个新值,error事件表示发送一个错误,completed事件表示signal成功结束。一个signal的生命周期可由多个 next事件和一个error或completed事件组成(后两者不同时出现)。


RACSignal主要用于异步控制或事件驱动的数据源,链式操作,并行独立动作。

RACSequence

主要用于简化集合转换。在 Foundation 库中没有类似 map和 filter、fold/reduce 等高级函数,Sequence是一种集合,可以简单看做是RAC世界的NSArray。但和数组不同的是,一个sequence里的值默认是懒加载的(只有需要的时候才加载),如果sequence只有一部分被用到,那么这种机制会提高性能。

IOS函数响应式编程开发简析

iOS项目中运用FRP

IOS函数响应式编程开发简析

在本小节中将会从两个方面来具体讲解iOS开发中采用FRP来简化代码结构。采用ReactiveCocoa来介绍FRP开发。对于Swift开发可以使用RxSwift,android开发使用RxJava。

封装网络请求

在移动端开发中,一般对于返回结果需要进行JSON转换、错误过滤等处理,采用ReactiveCocoa的链式操作可以极大的简化处理流程。


封装网络请求,将请求请求结果封装在RACSignal中:

一言不合上代码

IOS函数响应式编程开发简析
IOS函数响应式编程开发简析


将JSON转化为Object :

IOS函数响应式编程开发简析

还可以通过对得到的RACSignal操作,对网络返回结果进行过滤,转换。

MVVM绑定

在移动开发中MVC 是最常用的软件架构,也是苹果官方推荐的架构,在iOS中有ViewController类来实现控制器的功能,但是当某个页面逻辑较为复杂时,会使ViewController过于庞杂,变成了Massive View Controller。


MVVM的出现就是为了解决这个问题,其中VM代表ViewModel,通过把ViewController中的逻辑计算部分抽离到ViewModel中,ViewController只负责UI显示相关的事情。在这个过程中涉及到如何将View上的内容和ViewModel绑定的问题。通过RACSignal可以很好的解决这个问题。


下面是示例代码:

ViewController中绑定

IOS函数响应式编程开发简析


ViewModel中初始化

IOS函数响应式编程开发简析

总结


函数响应式编程(FRP)结合了函数式编程和响应式编程的特点,运用在移动端开发中,可以很好的简化代码,优化架构。特别是对于网络异步请求和动态绑定的情况,可以使代码清晰明了,便于维护。由于FRP具有函数式编程不记录状态的特点,非常适合在移动端开发中编写单元测试。

以上是关于IOS函数响应式编程开发简析的主要内容,如果未能解决你的问题,请参考以下文章

[HMLY]11.iOS函数式编程的实现&&响应式编程概念

深入浅出-iOS函数式编程的实现 && 响应式编程概念

深入浅出-iOS函数式编程的实现 && 响应式编程概念

iOS中的函数响应式编程思想

iOS 函数式编程 - 实现响应式框架

ReactiveCocoa,最受欢迎的iOS函数响应式编程库(2.5版),没有之一!