Swift Composable Architecture:Apple 平台的组合式状态管理方案

正文顶部截图

Swift Composable Architecture(简称 TCA)是一个用 Swift 编写的应用架构库,目前在 GitHub 上有 14,700+ Star。它由 Point-Free 团队开发,支持 iOS、macOS、iPadOS、visionOS、tvOS 和 watchOS 全平台,可以配合 SwiftUI 和 UIKit 使用。

README区域截图

解决什么问题

做 iOS 开发经常会遇到几个痛点:状态散落在各个 View 和 Controller 里难以追踪,页面间共享数据容易出 bug,网络请求等副作用难以测试,大功能拆分后模块之间难以组合。TCA 提供了一套统一的工具来处理这些问题。

核心概念

TCA 围绕四个核心类型构建:

  • State:用值类型描述功能所需的数据,比如列表内容、加载状态等
  • Action:用枚举列出所有可能发生的事件,包括用户点击、网络回调等
  • Reducer:一个纯函数,接收当前 State 和 Action,返回新的 State 以及需要执行的副作用
  • Store:运行时引擎,负责执行 Reducer 并管理状态的订阅和分发

数据流是单向的:用户操作产生 Action,Action 传入 Reducer,Reducer 修改 State,State 变化自动驱动 UI 更新。

举个例子,一个计数器功能只需要定义包含 count 的 State、几个按钮点击的 Action,以及一个根据 Action 修改 count 的 Reducer。代码量很少,逻辑却很清晰。

测试

TCA 的测试支持做得比较完善。TestStore 可以在单元测试中逐步验证每次状态变化是否符合预期。如果某个 Action 触发了网络请求之类的副作用,TestStore 也能捕获并验证副作用的返回结果。通过依赖注入,测试中可以用 mock 数据替代真实 API,不需要真的发请求。

示例项目

仓库自带的示例覆盖了多种场景。Case Studies 展示各种基础用法,包括导航、副作用、可复用组件等。SyncUps 是一个完整的联系人管理应用,Tic-Tac-Toe 演示了多模块拆分的做法,Todos 和 VoiceMemos 是经典的小功能实现。这些示例代码质量较高,适合直接阅读学习。

安装

在 Xcode 中通过 File > Add Package Dependencies 添加仓库地址,选择 ComposableArchitecture 产品即可。如果项目有多个 target,建议建一个共享 framework 统一依赖 TCA,仓库里的 Tic-Tac-Toe 示例就展示了这种做法。

背景

TCA 的设计理念来自 Elm 和 Redux,由 Brandon Williams 和 Stephen Celis 在 Point-Free 视频系列中逐步构建和完善。社区还有 TCACoordinators、TCAComposer 等配套库,分别处理路由协调和样板代码生成。仓库中也列出了 ReSwift、ReactorKit、Workflow 等同类方案供参考比较。

ReSwift、ReactorKit、Workflow 等同类方案供参考比较。

更多推荐