写点什么

Swift 可组合架构为 iOS 应用开发带来 Redux 模型

作者:Sergio De Simone

  • 2024-09-30
    北京
  • 本文字数:1402 字

    阅读完需:约 5 分钟

Swift 可组合架构为 iOS 应用开发带来Redux模型

可组合架构(TCA,最近发布了 1.13 版本)是一个“符合人体工程学”的 Swift 库。它提供了一个通用框架用于解决构建应用程序时经常遇到的问题,包括状态管理、特性组合、副作用管理和测试。


可组合架构基于几个关键的概念,包括 state(状态)、action(动作)、reducer 和 store(存储)。Reducer 和 store 这两个概念,使用 Redux 的 React 程序员应该都熟悉,但对于原生 iOS 开发来说,它们却是两个非常新颖的设计。按照库的创建者 Brandon Williams 和 Stephen Celis 的说法,这种方法可以将大而复杂的特性分解成多个更小的部分然后组合在一起。


据库的创建者介绍,虽然可组合架构可以与 UIKit 和 Swift 一起使用,但它的设计很大程度上是受了 SwiftUI 的启发,并且对它是个很好的补充。因此,对于熟悉 SwiftUI 及其模式的开发人员来说,这个库特别符合人体工程学。


特别地,TCA 提供了一个@ObservableState宏,它的工作方式类似于 iOS 16 的@Observable,并且可以像 SwiftUI 一样检测任何的状态变化。TCA 还借用了 SwiftUI 的方法来实现可组合性,其中每个特性都是一个提供body属性的类型,并且会模拟 SwiftUI @Environment属性封装器的行为,进而使用@Dependency属性封装器来处理依赖规范。


下面的代码片段展示了如何为一个简单的加减计数器特性建模:


@Reducerstruct 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<State, Action> { Reduce { state, action in switch action { // 在这里实现所有的动作; // 它们会修改状态或产生副作用 } } }}
复制代码


如上所示,App 的状态和供用户使用的动作都是使用特定的类型进行建模的,而body方法负责更新每个动作的状态。


TCA 的一个关键方面是状态共享,它是通过宏@Shared实现的。可以看到,它的工作原理类似于 SwiftUI @Binding,公开一个publisher属性,使其可以检测应用程序任何部分对引用做的更改。@Shared属性封装器还支持将数据持久化到内存、用户默认设置、通用文件或使用自定义机制。


在很大程度上,TCA 依赖于 SwiftUI 中常用的 UI 元素,比如sheet(item:)popover(item:)NavigationStack,但它自己也提供了更适合于状态驱动应用的导航机制。该库主要支持两种导航模式:基于树的导航和基于栈的导航。


库的作者承认,采用一个库作为应用程序架构的基础可能是一个相当具有挑战性的决定,但在某些情况下,那可能是最好的方法,而不是试图从头开始重新实现所有内容:


如果一个库的核心原则与你构建应用程序时优先考虑的事项一致,那么采用这个库可能就是一个明智的选择。最好是将一组定义良好的工具与连贯的维护历史和强大的社区结合在一起,而不是将分散在互联网博文中的许多“建议和技巧”粘合在一起。


Swift 可组合架构可以 从 GitHub 克隆或从 Swift Package Index 安装。它在 GitHub 上拥有超过 12000 颗星和 1400 个分支,以及 200 多位贡献者,这使它成为 Swift Package Index 上最受欢迎的 Swift 架构库。


原文链接:

https://www.infoq.com/news/2024/08/swift-composable-architecture/

2024-09-30 08:0016582

评论

发布
暂无评论
发现更多内容

千元级成本、小时级制作时长,华为云Flexus数字人有多高效?

轶天下事

以技术进步创造普惠价值!华为云Flexus数字人赋能中小企业营销创新

轶天下事

中小企业的高性价比之选!华为云Flexus数字人引领内容产出新潮流

平平无奇爱好科技

INFINI Labs 产品更新 | Easysearch 增加异步搜索等新特性

极限实验室

console Gateway easysearch CocoAI

Paper Reading | AI & 数据库融合经典论文回顾

KaiwuDB

AI 数据库、

不到千元体验最新数字人技术!华为云Flexus数字人效果领先更超值

平平无奇爱好科技

1:1复刻真实形象!华为云Flexus数字人门槛更低、效果更佳

平平无奇爱好科技

医疗科普新助力!华为云Flexus数字人引领行业变革

轶天下事

从教育培训机构的角度谈谈,华为云Flexus数字人对中小企业有何价值

轶天下事

加速中小企业数字化转型!华为云Flexus数字人有多强?

平平无奇爱好科技

制作便捷,门槛更低!华为云Flexus数字人开启电商数字化营销新篇章

平平无奇爱好科技

“千元级”分身数字人来了!华为云Flexus助力中小企业探索营销新方式

平平无奇爱好科技

2分钟生成数字人视频!华为云Flexus数字人助力中小企业高效创作

平平无奇爱好科技

迎接deepseek,助力企业AI整合

weigeonlyyou

AI AI软件 AI编程 AI软件开发 AI软件外包

不到千元轻松入手!华为云Flexus数字人制作简单、效果极佳

平平无奇爱好科技

不到千元即可拥有专属数字人!华为云Flexus数字人应用范围有多广?

平平无奇爱好科技

不到千元“打包”带走!华为云Flexus数字人助力中小企业降本增效

平平无奇爱好科技

【每日学点HarmonyOS Next知识】动图循环播放、监听tab切换、富文本上下滚动、tab默认居中、a标签唤起拨号

轻口味

HarmonyOS HarmonyOS NEXT

Swift 可组合架构为 iOS 应用开发带来Redux模型_后端_InfoQ精选文章