函数式编程 -> 函数响应式编程
// 假设用户在进入页面到离开页面期间,总共点击按钮 3 次 // 按钮点击序列 let taps: Array = [(), (), ()] // 每次点击后弹出提示框 taps.forEach { showAlert() } 理想情况下,这样处理点击事件确实很完美——每次点击就弹出提示框。但问题
// 假设用户在进入页面到离开页面期间,总共点击按钮 3 次
// 按钮点击序列
let taps: Array = [(), (), ()]
// 每次点击后弹出提示框
taps.forEach { showAlert() }
理想情况下,这样处理点击事件确实很完美——每次点击就弹出提示框。但问题来了:这个序列里的元素(点击事件)是异步产生的,传统数组没法描述这种“元素异步出现”的情况。你总不能在用户还没点击的时候就预先知道所有点击的时间点吧?
于是,为了解决这个问题,就有了可监听序列 Observable。它本质上还是一个序列,但里面的元素可以是同步产生的,也可以是异步产生的——也就是说,它既能描述当前已有的数据,也能描述未来才会出现的数据:

// 按钮点击序列
let taps: Observable = button.rx.tap.asObservable()
// 每次点击后弹出提示框
taps.subscribe(onNext: { showAlert() })
这里 taps 就是按钮点击事件的序列,然后我们通过订阅(subscribe)来对每一次点击事件做出响应——每次点击就弹出提示框。这种编程范式,就叫响应式编程。
那么,把函数式编程和响应式编程结合起来,就是我们常说的函数响应式编程(FRP)。来看一个实际例子:

passwordOutlet.rx.text.orEmpty
.map { $0.characters.count >= minimalPasswordLength }
.bind(to: passwordValidOutlet.rx.isHidden)
.disposed(by: disposeBag)
在这段代码里,我们通过不同的构建函数(比如 .rx.text、.orEmpty)来创建所需的数据序列,然后用 map 进行转换(函数式),最后通过 bind 来响应这个序列(响应式)。整个过程就像一条流水线:数据流进来,经过加工,输出到对应的控件上。这就是函数响应式编程的核心思想——用函数式的方式处理异步数据流。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。















