当前位置: 首页 > news >正文

RxSwift的介绍与使用

目录

  • 一、RxSwift 简介
  • 二、核心概念
  • 三、基础使用示例
    • 3.1、创建 Observable & 订阅事件
    • 3.2、操作符链式调用
    • 3.3、绑定 UI 控件 (RxCocoa)
    • 3.4、网络请求 + 线程切换
        • 3.5、组合多个请求 (flatMapLatest)
      • 核心操作符速查
  • 四、安装方式
  • 五、适用场景

一、RxSwift 简介

RxSwift 是 Swift 语言的响应式编程框架,基于 ReactiveX(Reactive Extensions) 标准实现。它通过 观察者模式函数式编程 思想,简化异步事件处理和数据流管理,特别适合处理 UI 事件、网络请求、数据绑定等场景。

二、核心概念

  1. Observable:数据源/事件流(被观察者)
  2. Observer:订阅者(观察者)
  3. Operator:操作符(转换/过滤/组合数据流)
  4. Scheduler:线程调度器(管理操作执行线程)
  5. Disposable:资源管理(取消订阅)

三、基础使用示例

3.1、创建 Observable & 订阅事件

import RxSwiftlet disposeBag = DisposeBag()// 创建 Observable
let stringObservable = Observable.just("Hello RxSwift!")
let numbersObservable = Observable.of(1, 2, 3)// 订阅事件
stringObservable.subscribe(onNext: { print($0) },onError: { print("Error: \($0)") },onCompleted: { print("Completed") }).disposed(by: disposeBag)/* 输出:
Hello RxSwift!
Completed
*/

3.2、操作符链式调用

Observable.of(1, 2, 3, 4, 5).filter { $0 % 2 == 0 }      // 过滤偶数.map { $0 * 10 }             // 乘以10.subscribe(onNext: { print($0) }).disposed(by: disposeBag)/* 输出:
20
40
*/

3.3、绑定 UI 控件 (RxCocoa)

import RxSwift
import RxCocoaclass ViewController: UIViewController {@IBOutlet weak var textField: UITextField!@IBOutlet weak var label: UILabel!let disposeBag = DisposeBag()override func viewDidLoad() {super.viewDidLoad()// 实时显示文本框内容(忽略空值)textField.rx.text.compactMap { $0 }  // 解包非空值.filter { !$0.isEmpty }.bind(to: label.rx.text).disposed(by: disposeBag)}
}

3.4、网络请求 + 线程切换

func fetchUser() -> Observable<User> {return Observable.create { observer inlet task = URLSession.shared.dataTask(with: URL(string: "https://api.example.com/user")!) { data, _, error inif let error = error {observer.onError(error)} else if let data = data {let user = try? JSONDecoder().decode(User.self, from: data)observer.onNext(user!)observer.onCompleted()}}task.resume()return Disposables.create { task.cancel() }}
}// 使用示例
fetchUser().subscribe(on: ConcurrentDispatchQueueScheduler(qos: .background)) // 后台线程请求.observe(on: MainScheduler.instance) // 主线程更新UI.subscribe(onNext: { user inprint("用户名: \(user.name)")},onError: { print("请求失败: \($0)") }).disposed(by: disposeBag)
3.5、组合多个请求 (flatMapLatest)
// 先登录 → 再获取用户信息
func login(username: String, password: String) -> Observable<String> {// 返回token的Observable
}func fetchProfile(token: String) -> Observable<UserProfile> {// 使用token获取用户信息
}login(username: "user", password: "pass").flatMapLatest { token infetchProfile(token: token) // 使用token获取用户信息}.subscribe(onNext: { profile inprint("用户邮箱: \(profile.email)")}).disposed(by: disposeBag)

核心操作符速查

操作符作用
map数据转换
filter条件过滤
flatMap扁平化嵌套Observable
debounce防抖动(搜索框场景)
combineLatest合并最新值
merge合并多个流
retry失败自动重试

四、安装方式

Podfile 中添加:

pod 'RxSwift', '~> 6.5'
pod 'RxCocoa', '~> 6.5'  # UI扩展

或使用 Swift Package Manager

dependencies: [.package(url: "https://github.com/ReactiveX/RxSwift.git", .upToNextMajor(from: "6.0.0"))
]

五、适用场景

  1. 实时搜索(debounce + flatMapLatest
  2. 表单验证(combineLatest 多个输入)
  3. 复杂异步依赖操作
  4. 多数据源绑定同一UI
  5. 状态管理(替代部分Delegate模式)

提示:RxSwift 学习曲线较陡,建议从简单场景逐步实践,配合 RxMarbles 可视化工具理解操作符行为。

http://www.lryc.cn/news/587724.html

相关文章:

  • Android展示加载PDF
  • SAP ERP与微软ERP dynamics对比,两款云ERP产品有什么区别?
  • ETF期权的涨跌策略是什么?
  • vue3 JavaScript 数据累加 reduce
  • Jetpack Compose 重组陷阱:一个“乌龙”带来的启示
  • 数字孪生技术驱动UI前端革新:实现产品设计的虚拟仿真与实时反馈
  • SpringMVC3
  • 计算机毕业设计Java轩辕购物商城管理系统 基于 SpringBoot 的轩辕电商商城管理系统 Java 轩辕购物平台管理系统设计与实现
  • CICS Application Programming Fundamentals 第4章
  • 74、【OS】【Nuttx】【启动】深入理解 caller-saved 和 callee-saved(下)
  • 游戏框架笔记
  • 网络准入控制系统的作用解析,2025年保障企业入网安全第一道防线
  • 在 Azure Linux 上安装 RustFS
  • 使用 pytest 测试框架构建自动化测试套件之一
  • LightGBM 在处理**不均衡二分类任务**时,能在 **AUC 和 Accuracy** 两个指标上表现良好
  • SQL性能调优经验总结
  • 【Linux】基本指令详解(一) 树状文件结构、家目录、绝对/相对路径、linux文件类型
  • 1.2.1 面向对象详解——AI教你学Django
  • 【世纪龙科技】迈腾B8汽车整车检测与诊断仿真实训系统
  • 波兰无人机具身导航基准测试与最新进展!FlySearch:探索视觉语言模型的探索能力
  • 用Spring Boot逻辑删除(isDelete)优雅守护你的数据资产:告别物理删除的烦恼
  • 第十二批深度合成算法备案情况
  • [源力觉醒 创作者计划]_文心大模型4.5开源部署指南:从技术架构到实战落地
  • C++动态数组vector
  • JavaScript数据交互:现代Web应用的核心引擎
  • Redis技术笔记-主从复制、哨兵与持久化实战指南
  • 【MySQL】剖析InnoDB存储引擎
  • FBRT-YOLO: Faster and Better for Real-Time Aerial Image Detection论文精读(逐段解析)
  • Spring原理揭秘--初识AOP
  • openEuler系统串口文件手法压力测试及脚本使用说明