重要提示
此软件包已被弃用,建议使用 Swift Navigation。
用于使 SwiftUI 导航更简单、更符合人体工程学且更精确的工具。
SwiftUI 提供了多种导航形式(标签、警报、对话框、模态表单、弹出窗口、导航链接等等),每种形式都有几种构建方法。这些方法大致可分为两类
“即发即弃”:这些是不接受绑定参数的初始化器和方法,这意味着 SwiftUI 完全在内部管理导航状态。这使得快速在屏幕上显示内容变得容易,但您也无法以编程方式控制导航。这方面的例子包括 TabView
和 NavigationLink
上不接受绑定的初始化器。
“状态驱动”:大多数其他初始化器和方法都接受绑定,这意味着您可以更改域中的状态来告诉 SwiftUI 何时应该激活或停用导航。使用这些 API 比“即发即弃”风格更复杂,但这样做可以立即让您能够通过构建数据,将其交给 SwiftUI 视图,并让 SwiftUI 处理其余部分,从而深度链接到应用程序的任何状态。
“状态驱动”导航是更强大的导航形式,尽管稍微复杂一些。不幸的是,SwiftUI 并没有提供所有必要的工具来使用枚举对我们的域进行建模并利用导航 API。这个库弥合了这一差距,它提供的 API 允许您将导航目的地建模为枚举,然后通过绑定到该枚举来驱动导航。
通过查看文档并阅读以下文章,探索此库提供的所有工具
什么是导航?:了解如何将导航视为域建模问题,以及这如何促成简洁且可测试的导航 API 的创建。
导航链接和目的地:了解如何在 NavigationView 和 NavigationStack 中以简洁且可测试的方式驱动导航。
表单、弹出窗口和全屏覆盖:了解如何以简洁且可测试的方式呈现表单、弹出窗口和全屏覆盖。
警报和对话框:了解如何以简洁且可测试的方式呈现警报和确认对话框。
绑定:了解如何直接在可观察类中管理某些视图状态,例如 @FocusState
。
此仓库附带了许多示例,演示如何使用该库解决常见和复杂的导航问题。查看此目录以查看所有示例,包括
SwiftUI Navigation 的工具的设计灵感和动机来自于 Point-Free 的许多剧集,这是一个探索函数式编程和 Swift 语言的视频系列,由 Brandon Williams 和 Stephen Celis 主持。
您可以在此处观看所有剧集。
如果您想讨论此库或对如何使用它来解决特定问题有疑问,可以与 Point-Free 爱好者在以下几个地方进行讨论
您可以通过将 SwiftUI Navigation 添加为软件包依赖项,将其添加到 Xcode 项目中。
如果您想在 SwiftPM 项目中使用 SwiftUI Navigation,只需将其添加到 Package.swift
中的 dependencies
子句中即可
dependencies: [
.package(url: "https://github.com/pointfreeco/swiftui-navigation", from: "1.0.0")
]
SwiftUI Navigation API 的最新文档可在此处获取:此处。
此库在 MIT 许可证下发布。有关详细信息,请参阅 LICENSE。