Swift可组合架构将Redux模型引入iOS应用开发

Composable Architecture (TCA) 概述

Composable Architecture (TCA) 是一个基于 Swift 的库,旨在解决应用开发中的常见问题,包括状态管理、功能组合、副作用管理和测试。该库最近发布了 1.13 版本,提供了一个通用的框架,帮助开发者更好地构建应用。

核心概念

TCA 构建在几个核心概念之上:

  1. 状态 (State):应用的状态,通常是一个结构体。
  2. 动作 (Action):用户或系统触发的动作,通常是一个枚举。
  3. Reducer:负责根据动作更新状态的函数。
  4. Store:存储状态并处理动作的容器。

这些概念对于使用 Redux 的 React 开发者来说可能很熟悉,但在原生 iOS 开发中相对新颖。

与 SwiftUI 的集成

TCA 的设计受到 SwiftUI 的启发,并且与 SwiftUI 很好地互补。它提供了 @ObservableState 宏,类似于 iOS 16 的 @Observable,允许像 SwiftUI 那样观察最小状态变化。此外,TCA 还引入了 @Dependency 属性包装器,用于管理依赖关系。

示例代码

以下是一个简单的计数器功能的代码示例:

@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<State, Action> {
        Reduce { state, action in
            switch action {
                // 实现所有动作;
                // 它们修改状态或具有副作用
            }
        }
    }
}

在这个示例中,应用的状态和用户可用的动作通过特定类型进行建模,body 方法负责根据每个可用动作更新状态。

状态共享

TCA 通过 @Shared 宏实现状态共享,类似于 SwiftUI 的 @Binding@Shared 属性包装器支持将数据持久化到内存、用户默认值、通用文件或使用自定义机制。

导航机制

TCA 提供了自己的导航机制,更适应状态驱动的应用。它支持两种主要的导航范式:基于树的导航和基于堆栈的导航。

采用 TCA 的考虑

TCA 的作者承认,采用一个库作为应用架构的基础可能是一个具有挑战性的决定。然而,如果库的核心原则与构建应用的优先事项一致,那么采用该库可能是一个明智的选择。与从零开始重新实现所有功能相比,使用一个维护良好、社区强大的库可能是更好的选择。

获取与社区

TCA 可以从 GitHub 克隆或通过 Swift Package Index 安装。它在 GitHub 上拥有超过 12,000 颗星和 1,400 个分支,拥有超过 200 名贡献者,使其成为 Swift Package Index 上最受欢迎的 Swift 架构库之一。

阅读 41
0 条评论