商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 函数式编程 -> 函数响应式编程

函数式编程 -> 函数响应式编程

  发布于2026-07-21 阅读(0)

扫一扫,手机访问

// 假设用户在进入页面到离开页面期间,总共点击按钮 3 次
// 按钮点击序列
let taps: Array = [(), (), ()]
// 每次点击后弹出提示框
taps.forEach { showAlert() }

理想情况下,这样处理点击事件确实很完美——每次点击就弹出提示框。但问题来了:这个序列里的元素(点击事件)是异步产生的,传统数组没法描述这种“元素异步出现”的情况。你总不能在用户还没点击的时候就预先知道所有点击的时间点吧?

于是,为了解决这个问题,就有了可监听序列 Observable。它本质上还是一个序列,但里面的元素可以是同步产生的,也可以是异步产生的——也就是说,它既能描述当前已有的数据,也能描述未来才会出现的数据:

image.png

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

这里 taps 就是按钮点击事件的序列,然后我们通过订阅(subscribe)来对每一次点击事件做出响应——每次点击就弹出提示框。这种编程范式,就叫响应式编程。

那么,把函数式编程和响应式编程结合起来,就是我们常说的函数响应式编程(FRP)。来看一个实际例子:

image.png

passwordOutlet.rx.text.orEmpty
    .map { $0.characters.count >= minimalPasswordLength }
    .bind(to: passwordValidOutlet.rx.isHidden)
    .disposed(by: disposeBag)

在这段代码里,我们通过不同的构建函数(比如 .rx.text.orEmpty)来创建所需的数据序列,然后用 map 进行转换(函数式),最后通过 bind 来响应这个序列(响应式)。整个过程就像一条流水线:数据流进来,经过加工,输出到对应的控件上。这就是函数响应式编程的核心思想——用函数式的方式处理异步数据流。

本文转载于:https://blog.csdn.net/tuyuan2012/article/details/110653954 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注