要求: 此软件包需要 i(Pad)OS 17 和 macOS 14 (Sonoma) 才能使用 Observation
框架。
此 Swift 软件包为 macOS 和 iOS 上的 SwiftUI 项目导航提供支持。其核心是一个文件树导航器,可在 NavigationSplitView
中使用。该软件包由两个库组成:(1) Files
和 (2) ProjectNavigator
。
Files
库充当模型,表示可以从 FileWrapper
编组和解编组的文件树。单个文件和文件夹也被分配了 UUID
,并支持持久化分配。这对于支持持久视图和其他配置非常有用。为基于文档的 SwiftUI 应用模型所需的一切都已提供。
File
数据类型在用户定义的 Payload
(即文件内容)中是通用的,其最低要求由同名协议给出。可以无缝地组合多种文件类型。在尽可能的情况下,文件树表示为值类型,并通过绑定进行更新,以保持 SwiftUI 的精神。
FileNavigator
视图在封闭的 NavigationSplitView
内提供对关联文件的导航。导航标签以及导航目标视图都是可自由配置的。上下文菜单可用于方便文件树的编辑。可编辑的文本标签可用于文件名的内联编辑。
简单用法(不带上下文菜单、可编辑标签等)如下
var body: some View {
NavigationSplitView {
List(selection: $viewState.selection) {
FileNavigator(name: "Root",
item: .constant(fileTree.root),
parent: .constant(nil),
viewState: viewState,
fileLabel: { cursor, _editing, _ in Text(cursor.name) },
folderLabel: { cursor, _editing, _ in Text(cursor.name) })
}
.navigationTitle("Entries")
} detail: {
if let uuid = viewState.selection,
let file = fileTree.proxy(for: uuid).file
{
Text(file.contents.text)
} else {
Text("Select a file")
}
}
}
文件夹 NavigatorDemo
包含一个简单的跨平台示例应用程序,该应用程序便于导航和编辑文本文件束。这个基于文档的应用程序使用 ReferenceFileDocument
作为其文档模型。此外,它还演示了可编辑标签和标签上的上下文菜单的用法。包含 ProjectNavigator
软件包以及 NavigationDemo
示例应用程序的 Xcode 工作区包含在 NavigatorDemo.xcworkspace
中。
您可能想要浏览 Files
目标 和 ProjectNavigator
目标 的 DocC 文档。该文档由 Swift Package Index 友好地构建和托管。
版权所有 [2022..2024] Manuel M. T. Chakravarty。
根据 Apache-2.0 许可证分发 — 有关详细信息,请参阅许可证文件。