Swift 可组合架构为 iOS 应用开发带来 Redux 模型
InfoQ讯 近日,Swift 可组合架构(TCA)发布了 1.13 版本,该框架为 iOS 应用开发带来了 Redux 模型,为开发者提供了一个“符合人体工程学”的 Swift 库,用于解决构建应用程序时遇到的常见问题,包括状态管理、特性组合、副作用管理和测试。
TCA 基于几个关键概念:状态(state)、动作(action)、reducer 和存储(store)。其中,reducer 和 store 对于熟悉 Redux 的 React 开发者来说并不陌生,但对于原生 iOS 开发来说,它们是全新的设计理念。
TCA 的创建者 Brandon Williams 和 Stephen Celis 表示,这种方法可以将大型复杂的功能分解成多个更小的部分,然后组合在一起。虽然 TCA 可以与 UIKit 和 Swift 一起使用,但它的设计很大程度上受到了 SwiftUI 的启发,并与 SwiftUI 相辅相成。因此,对于熟悉 SwiftUI 及其模式的开发者来说,TCA 更加易于上手。
TCA 提供了 @ObservableState
宏,其工作方式类似于 iOS 16 的 @Observable
,可以检测任何状态变化。同时,TCA 还借鉴了 SwiftUI 的可组合性方法,每个功能都是一个提供 body
属性的类型,并模拟 SwiftUI @Environment
属性封装器的行为,使用 @Dependency
属性封装器来处理依赖规范。
以下代码片段展示了如何为一个简单的加减计数器功能建模:
“`swift
@Reducer
struct Feature {
@ObservableState
struct State: Equatable {
var count = 0
var numberFact: String?
}
enum Action {
case decrementButtonTapped
case incrementButtonTapped
case numberFactButtonTapped
case numberFactResponse(String)
}
var body: some Reducer\u003cState, Action\u003e {
Reduce { state, action in
switch action {
// 在这里实现所有的动作;
// 它们会修改状态或产生副作用
}
}
}
}
“`
如上所示,应用程序的状态和用户可用的动作都使用特定的类型进行建模,而 body
方法负责更新每个动作的状态。
TCA 的一个关键方面是状态共享,它通过 @Shared
宏实现。@Shared
的工作原理类似于 SwiftUI的 @Binding
,公开一个 publisher
属性,使其可以检测应用程序任何部分对引用的更改。@Shared
属性封装器还支持将数据持久化到内存、用户默认设置、通用文件或使用自定义机制。
TCA 在很大程度上依赖于 SwiftUI 中常用的 UI 元素,例如 sheet(item:)
、popover(item:)
和 NavigationStack
,但它也提供了更适合状态驱动应用程序的导航机制。该库主要支持两种导航模式:基于树的导航和基于栈的导航。
库的作者承认,采用一个库作为应用程序架构的基础可能是一个具有挑战性的决定,但在某些情况下,这可能是最好的方法,而不是试图从头开始重新实现所有内容。如果一个库的核心原则与构建应用程序时优先考虑的事项一致,那么采用这个库可能是一个明智的选择。
Swift 可组合架构可以从 GitHub 克隆或从 SwiftPackage Index 安装。它在 GitHub 上拥有超过 12000 颗星和 1400 个分支,以及 200 多位贡献者,这使它成为 Swift Package Index 上最受欢迎的 Swift 架构库。
TCA 的出现为 iOS 应用开发带来了新的思路,它将 Redux 模型引入 Swift,为开发者提供了一个更简洁、更易于维护的架构方案。相信随着 TCA 的不断发展,它将成为 iOS 应用开发领域的重要工具,帮助开发者构建更强大、更易于扩展的应用程序。
【来源】https://mp.weixin.qq.com/s/X-0vo0bQZl2tsg4ArhQlpQ
Views: 1