跳到主要内容

TCA 与单向数据流

问题

什么是单向数据流?TCA 的核心思想是什么?

答案

单向数据流

核心特点:

  • State 只能通过 Action→Reducer 修改,不允许直接修改
  • 状态变化可预测、可追踪
  • 类似前端 Redux 的思路

TCA(The Composable Architecture)

import ComposableArchitecture

// 定义 Feature
@Reducer
struct CounterFeature {
@ObservableState
struct State: Equatable {
var count = 0
}

enum Action {
case increment
case decrement
case reset
}

var body: some ReducerOf<Self> {
Reduce { state, action in
switch action {
case .increment:
state.count += 1
return .none
case .decrement:
state.count -= 1
return .none
case .reset:
state.count = 0
return .none
}
}
}
}

// View
struct CounterView: View {
let store: StoreOf<CounterFeature>

var body: some View {
VStack {
Text("\(store.count)")
HStack {
Button("-") { store.send(.decrement) }
Button("+") { store.send(.increment) }
}
}
}
}

TCA vs MVVM

MVVMTCA
数据流双向绑定单向
状态分散在多个 @Published集中在 State
副作用散布在 ViewModelEffect 统一管理
测试Mock 依赖直接断言 State 变化
学习成本

常见面试问题

Q1: 单向数据流的优缺点?

答案

  • 优点:状态可预测、时间旅行调试、天然适合 SwiftUI
  • 缺点:模板代码多、学习成本高、简单页面反而复杂化

Q2: 什么项目适合 TCA?

答案:多页面共享状态、复杂交互逻辑、需要严格测试的项目。简单列表展示页用 MVVM 足够。

相关链接