Swift 是苹果推出的一门更加年青、现代的言语,它身上汇集了近些年来编程思维之大成,例如面向协议、函数式、呼应式编程。它是苹果大力推崇的 iOS 开发言语,在苹果的不断更新中,已逐渐稳定,已经有越来越多的大厂尝试投入 Swift 的怀有。

本专栏基于 Swift 言语,对呼应式、函数式编程的闻名框架 RxSwift 进行了核心流程剖析和代码实战演示。

本文对常用编程范式进行了介绍,并结合 RxSwift 框架对函数式、呼应式编程进行了展示。

概念

常见的编程范式有指令式编程(Imperative programming)声明式编程(Declarative programming)函数式编程(Functional programming)呼应式编程(Reactive Programming) 等。

指令式编程是一种描述计算机所需作出的行为的编程典范,每步都是指令,首要思维在于重视计算机执行的具体步骤。

声明式编程是以数据结构的形式来表达程序执行的逻辑。首要思维是告知计算机应该做什么,但不指定具体要怎么做。

函数式编程First Class Function,即函数为一等公民,既能够作为其它函数的输入参数,也能够作为函数的返回值。咱们能够经过组合不同的函数来得到想要的结果。

呼应式编程是一种面向数据流和改变传达的编程范式。最初是为了简化交互式用户界面的创建和实时体系动画的制作而提出来的一种方法。Flutter 中的 EventBus 便是一种呼应式运用,在 Swift 中咱们一般运用 RxSwift 框架。

函数式编程

要完成以下功用:

let array = [1, 2, 3, 4, 5, 6, 7]
// 首先获取数组中 > 3 的数字
// 获取的数字之后 + 1
// 打印所有数字中的偶数

传统写法:

for num in array {
    if num > 3 {
        let number = num + 1
        if (number % 2 == 0) {
            print(number)
        }
    }
}

函数式写法:

array.filter { $0 > 3 }
    .filter { ($0+1) % 2 == 0 }
    .forEach { print($0+1) }

函数式编程的长处是清楚明了的:

  • 灵敏
  • 高复用
  • 简洁
  • 易维护
  • 适应各种需求改变

呼应式编程

简介

iOS开发中,比较闻名和成熟的呼应式框架有两个:

ReactiveCocoa 简称 RAC,有Objective-CSwift版本
官网:reactivecocoa.io
GitHub:github.com/ReactiveCoc…

ReactiveX 简称 Rx,有众多编程言语的版本,比如RxJavaRxKotlinRxJSRxSwift
官网:reactivex.io
GitHub:github.com/ReactiveX

RxSwift 是经过构建函数操作数据序列,然后对这些序列做出呼应的编程方法,结合了函数式编程以及呼应式编程的思维。
源码:github.com/ReactiveX/R…
中文文档:beeth0ven.github.io/RxSwift-Chi…

函数呼应式编程

要完成以下功用:

假设用户在进入页面到脱离页面期间,一共点击按钮 3 次,每次点击都会弹出一个弹窗

传统完成:

// 按钮点击序列
let taps: Array<Void> = [(), (), ()]
// 每次点击后弹出提示框
taps.forEach { showAlert() }

这样处理点击事情是非常抱负的,可是问题是这个序列里边的元素(点击事情)是异步发生的,传统序列是无法描叙这种元素异步发生的状况。为了解决这个问题,于是就发生了可监听序列Observable<Element>。它也是一个序列,只不过这个序列里边的元素能够是同步发生的,也能够是异步发生的:

// 按钮点击序列
let taps: Observable<Void> = button.rx.tap.asObservable()
// 每次点击后弹出提示框
taps.subscribe(onNext: { showAlert() })

这儿taps便是按钮点击事情的序列。然后咱们经过弹出提示框,来对每一次点击事情做出呼应。这种编程方法叫做呼应式编程。咱们结合函数式编程以及呼应式编程就得到了函数呼应式编程

button.rx.tap.asObservable()
    .subscribe(onNext: { showAlert() })
    .disposed(by: disposeBag)

咱们经过不同的构建函数,来创建所需要的数据序列。最后经过恰当的方法来呼应这个序列。这便是函数呼应式编程