ShaftDemo

Actions GitHub repo size GitHub issues GitHub pull requests Platforms

Shaft 是一个跨平台 UI 框架,专为高性能应用程序设计,注重简洁性和可定制性。

最新✨:一篇详细介绍 Shaft 的博客文章已发布在这里

需求

开始使用

git clone https://github.com/ShaftUI/Shaft.git

cd Shaft

swift package plugin setup-skia

swift run Playground

这些命令将启动内置的 Playground 应用程序,该应用程序既是交互式演示,又是 Shaft 框架的全面文档。

setup-skia 命令会将预构建的 Skia 二进制文件下载到 ./.shaft 目录供软件包使用。将来,当 swift-package-manager#7035 取得进展时,我们可能会取消此步骤。

要使用 Shaft 创建一个新项目,CounterTemplate 是一个很好的起点。

特性

无需构建基础设施或特殊工具链 - 仅仅是一个包含引擎和框架的常规 Swift 包,使其易于自定义、扩展和适应您的特定需求。

专为苛刻的工作负载而构建,具有原生多线程支持、直接低级图形 API 访问以及通过 ARC 进行确定性内存管理。可以毫不费力地从简单的应用程序扩展到复杂的、资源密集型的应用程序。

Shaft 的模块化设计可以轻松集成自定义后端和渲染器。这种灵活性允许独特的用例,例如基于终端的 UI 或创建 Wayland 合成器,使开发人员能够调整框架以适应专门的用例。

@Observable 标记的数据可以在值更改时自动更新 UI。该框架会自动跟踪这些对象,并仅高效地刷新受影响的 UI 组件,从而无需手动状态管理并减少样板代码。这种反应式方法可确保您的 UI 以高性能方式与您的数据保持同步

@Observable class Counter {
    var count = 0
}

let counter = Counter()

class CounterView: StatelessWidget {
    func build(context: any BuildContext) -> any Widget {
        Column {
            Text("Count: \(counter.count)")

            Button {
                counter.count += 1
            } child: {
                Text("Increment")
            }
        }
    }
}

概念

Architecture

更多文档可以在 Playground 应用程序中找到。