ProjectNavigator

要求: 此软件包需要 i(Pad)OS 17 和 macOS 14 (Sonoma) 才能使用 Observation 框架。

此 Swift 软件包为 macOS 和 iOS 上的 SwiftUI 项目导航提供支持。其核心是一个文件树导航器,可在 NavigationSplitView 中使用。该软件包由两个库组成:(1) Files 和 (2) ProjectNavigator

Files

Files 库充当模型,表示可以从 FileWrapper 编组和解编组的文件树。单个文件和文件夹也被分配了 UUID,并支持持久化分配。这对于支持持久视图和其他配置非常有用。为基于文档的 SwiftUI 应用模型所需的一切都已提供。

File 数据类型在用户定义的 Payload(即文件内容)中是通用的,其最低要求由同名协议给出。可以无缝地组合多种文件类型。在尽可能的情况下,文件树表示为值类型,并通过绑定进行更新,以保持 SwiftUI 的精神。

ProjectNavigator

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

文件夹 NavigatorDemo 包含一个简单的跨平台示例应用程序,该应用程序便于导航和编辑文本文件束。这个基于文档的应用程序使用 ReferenceFileDocument 作为其文档模型。此外,它还演示了可编辑标签和标签上的上下文菜单的用法。包含 ProjectNavigator 软件包以及 NavigationDemo 示例应用程序的 Xcode 工作区包含在 NavigatorDemo.xcworkspace 中。

文档

您可能想要浏览 Files 目标ProjectNavigator 目标 的 DocC 文档。该文档由 Swift Package Index 友好地构建和托管。

许可证

版权所有 [2022..2024] Manuel M. T. Chakravarty。

根据 Apache-2.0 许可证分发 — 有关详细信息,请参阅许可证文件