Swidux 1.0.0

Swidux 1.0.0

Clément Cyril 维护。



Swidux 1.0.0

Swidux

受 Redux 启发的 Swift 单向数据流。

使用方法

定义您的应用程序状态,

struct AppState {
    var count = 0
}

可能执行的动作列表,

enum CounterAction: Action {
    case increment
    case decrement
}

以及它们如何影响应用程序状态。

let counterReducer = Reducer<Int> { state, action in
    switch action {
    case CounterAction.increment: state += 1
    case CounterAction.decrement: state -= 1
    default: break
    }
}

然后初始化应用程序存储,

let store = Store<AppState>(
    initialState: AppState(),
    reducer: counterReducer.lift(\.count)
)

订阅任何应用程序状态键路径以接收状态更改通知(确保保留引用,因为其释放将停止订阅)。

let token = store.subscribe(\.count) { print($0) }

现在 dispatch 动作以修改应用程序状态,并使用您的状态更改订阅来更新您的 UI,...

store.dispatch(CounterAction.increment)
store.dispatch(CounterAction.decrement)

讨论

AppState

应用程序状态必须是值类型,因为 Swidux 存储依赖于 didSet 监听器来通知订阅者状态更改。

减速器

还原器使用 (inout State, Action) -> Void 签名(而不是 (State, Action) -> State),以提高性能并避免大量 State 的复制。

中间件

中间件允许扩展 swidux 架构。它们可以在还原器之前和之后执行操作,可以用来处理各种问题,如日志记录、处理异步操作等...

内部,每个中间件都会接收到一个 dispatch 函数作为参数(以及用于获取状态的存储),并返回一个包装后的函数,该函数将被下一个中间件和最终被 swidux 存储使用。
因此,您应该注意中间件的顺序。例如,一个中间件可能决定不向 dispatch 函数传播某些操作(可能是这些操作仅用于其操作)。如果您的中间件中包含日志记录器,则根据中间件的顺序,这些操作将被记录或不会记录。

安装

Carthage

在您的 Cartfile 中添加以下依赖项

github "clmntcrl/swidux" ~> 1.0

CocoaPods

在您的 Podfile 中添加以下插件

pod 'Swidux', '~> 1.0'

SwiftPM

在您的 Package.swift 中将包作为依赖项添加

dependencies: [
    .package(url: "https://github.com/clmntcrl/swidux.git", from: "1.0"),
]

许可协议

Swidux 在 MIT 许可协议下发布。详细信息请见 LICENSE