SwiftCurrent

Supported Platforms Swift Package Manager Pod Version License Build Status Code Coverage

欢迎

SwiftCurrent 是一个库,可以让你轻松管理 Swift 应用程序中的流程,并内置了对 UIKit 和 SwiftUI 应用路由的支持。

为什么要使用 SwiftCurrent?

在 SwiftCurrent 中,工作流是一系列操作。这些操作通常在应用程序中显示视图。工作流描述了视图的顺序,并管理应该显示哪个视图。你的视图负责在工作流程中前进之前执行必要的任务,例如处理用户输入。

已经存在尝试在视图和工作流之间创建分离的架构模式和库。 然而,SwiftCurrent 是不同的。 我们采用了一种新的设计方法,侧重于:

由此,我们创建了一个库,它:

这个库:

快速开始

当我们有一个示例应用程序时,为什么要展示快速入门? 因为入门非常容易,我们可以放入两个代码片段,你就准备好了! 这个快速入门使用 Swift Package Manager 和 SwiftUI,但对于其他方法,请参阅我们的安装说明

.package(url: "https://github.com/wwt/SwiftCurrent.git", .upToNextMajor(from: "5.1.0")),
...
.product(name: "SwiftCurrent", package: "SwiftCurrent"),
.product(name: "SwiftCurrent_SwiftUI", package: "SwiftCurrent")

然后创建你的第一个 FlowRepresentable 视图

import SwiftCurrent
import SwiftUI
struct OptionalView: View, FlowRepresentable {
    weak var _workflowPointer: AnyFlowRepresentable?
    let input: String
    init(with args: String) { input = args }
    var body: some View { Text("Only shows up if no input") }
    func shouldLoad() -> Bool { input.isEmpty }
}
struct ExampleView: View, PassthroughFlowRepresentable {
    weak var _workflowPointer: AnyFlowRepresentable?
    var body: some View { Text("This is ExampleView!") }
}

然后从你的 ContentView 或任何你想包含工作流程的视图(或应用程序)中,将以下视图添加到 body 中

import SwiftCurrent_SwiftUI
// ...
var body: some View { 
    // ... other view code (if any)
    WorkflowView(launchingWith: "Skip optional screen") {
        WorkflowItem(OptionalView.self)
        WorkflowItem(ExampleView.self)
    }
}

就是这样,你就有了一个工作流程! 现在,你可以向其中添加更多项目或重新排序现有项目。 要了解更多有关其工作原理的信息,请查看我们的开发者文档。

服务器驱动的工作流程

SwiftCurrent 现在支持服务器驱动的工作流程! 查看我们的 schema 以获取有关使用 JSON、YAML 或任何其他基于键/值的数据格式定义工作流程的详细信息。 然后,只需将你希望解码的 FlowRepresentable 类型遵循 WorkflowDecodable 并解码工作流程。 有关更多信息,请参阅我们的文档

查看我们的示例应用程序

我们有针对 SwiftUI 和 UIKit 的 示例应用程序,展示了 SwiftCurrent 的实际应用。 它们已经过测试,因此你可以看到测试 SwiftCurrent 代码是什么样的。 要在本地运行它,请首先克隆 repo,打开 SwiftCurrent.xcworkspace,然后运行 SwiftUIExample scheme 或 UIKitExample scheme。

点击此处了解更多信息

有关具体文档,请查看:

反馈

如果你喜欢你所看到的,请考虑 给我们一个 star! 如果你不喜欢,请告诉我们 如何改进

Stars

特别鸣谢

如果没有我们的测试依赖项的作者所做的出色工作,SwiftCurrent 就不会如此出色: