Redux.swift 5.0.0

Redux.swift 5.0.0

测试已测试
语言语言 SwiftSwift
许可 MIT
发布最后发布2018年6月
SPM支持 SPM

Fellipe Caetano 维护。



  • 作者:
  • Fellipe Caetano

Redux.swift

Version License Platform

Redux.swift 是 Swift 编写的可预测状态容器实现。受 ReduxReSwift 的启发,它旨在通过将整个应用程序状态保存在一个无法直接修改的单个数据结构中,并通过动作分派机制描述更改,来强制分离关注点和一个方向的数据流。

内容

原则

  • 单一真实来源:应用程序的状态存储在单个分层数据结构中。这使得在任何给定时间点推理状态更容易,简化了状态持久性和代码可读性,因为可以轻松推导出状态树每个分支的定义。
  • 状态是只读的:状态只能通过分派的 动作(轻量级对象,描述应进行哪些更改)进行修改。由于修改是集中化的,不一致性很少发生,竞争条件更容易避免。
  • 通过纯函数应用突变:行为只是变化的描述。实际逻辑是通过名为 reducers 的纯函数来执行,这些函数接收状态分支的当前快照和一个行为,并返回状态变化后的新快照。

使用

您的应用状态理想上应定义为一个轻量级的 struct

struct CounterState {
    let counter: Int
}

例如,用户可能会在您的应用中执行的操作会被描述为 actions

struct IncrementAction: Action {
    let increment: Int
}

然后您会定义一个 store,这是一个用于存储和保护状态的数结构。此存储将接收已分发的行为,并调用您的reducers根据这些行为转变状态。典型的应用只会定义一个store并在内存中保留其一生。

let store = Store<CounterState>(initialState: CounterState(counter: 0)) { state, action in
    // ...
}

行为描述了应该改变的内容,但 reducers 决定了如何应用这些变化。

let store = Store<CounterState>(initialState: CounterState(counter: 0)) { state, action in
    switch action {
    case let action as IncrementAction:
        return CounterState(counter: state.counter + action.increment)

    default:
        return state
    }
}

行为通过store分发,变化的结果会传播到 subscribers

let _ = store.subscribe { newState in
    // UI updates etc.
}

store.dispatch(IncrementAction(increment: 3))

最后,当适用时,subscribers应 取消订阅

let unsubscribe = store.subscribe { //... }

// ...

unsubscribe()

示例

Example 目录中,您将找到一个示例应用程序,它展示了一个计数器,可以通过增加和减少按钮来操作。要运行它:

  1. 克隆仓库
  2. 进入 Example 目录
  3. 运行 carthage update --platform iOS
  4. 在Xcode中打开 Example.xcodeproj
  5. 在停止按钮附近的下拉选择器中,选择 Example 目标
  6. 构建并运行应用程序

测试

要测试库,请运行以下命令:

  1. 克隆仓库
  2. 在Xcode中打开 Redux.xcworkspace
  3. Stop 按钮附近的下拉选择器中,选择 Redux 目标
  4. ⌘U 或从 Product 菜单单击 Test

要求

  • iOS 9.0+
  • Xcode 8.0+

安装

CocoaPods

Redux.swift 通过 CocoaPods 提供,它是一个用于 Cocoa 项目的依赖管理器。CocoaPods 可以作为一个独立的应用下载,也可以通过 RubyGems 安装。

$ gem install cocoapods

要使用 CocoaPods 将 Redux.swift 集成到您的 Xcode 项目中,请在您的 Podfile 中指定它。

target '<target_name>' do
  pod 'Redux.swift'
end

然后,通过 CocoaPods 应用或通过在您的 Podfile 所在目录中运行以下命令来安装依赖项:

$ pod install

Carthage

Carthage 是一个去中心化的依赖管理器,它会构建您的依赖项并提供二进制框架。

您可以使用以下命令使用 Homebrew 安装 Carthage:

$ brew update
$ brew install carthage

要使用 Carthage 将 Redux.swift 集成到您的 Xcode 项目中,请在您的 Cartfile 中指定它。

github "fellipecaetano/Redux.swift"

运行 carthage update 以构建框架,并将构建好的 Redux.framework 拖动到您的 Xcode 项目中。

免责声明

Redux.swift 非常小巧,我在编写它时力求清晰,因此希望整个代码可以轻松理解。它并不意味着是 Redux 的完整翻译,也不希望取代像 ReSwift 这样的成熟和稳固的项目。它更多的是一个实验和练习,我希望您在使用它的过程中也能像我编写它时一样享受乐趣。

鸣谢

作者

Fellipe Caetano, [email protected]

许可证

Redux.swift 在MIT许可证下可用。更多信息请参阅LICENSE文件。