UIEnvironment

一个框架,旨在模仿 SwiftUI 视图环境,以便在您的 UIKit 视图层级结构中复制值的分布。


概述

使用 UIEnvironment 属性包装器来读取存储在视图环境中的值。在属性声明中使用 UIEnvironmentValues 键路径来指示要读取的值。例如,您可以创建一个属性,使用 userInterfaceStyle 属性的键路径读取当前视图的用户界面样式

final class ViewController: UIViewController {
    @UIEnvironment(\.userInterfaceStyle) private var userInterfaceStyle
    ...
}

您可以根据关联的值来设置视图的内容条件,该值可以通过直接引用已声明的属性来读取

override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = userInterfaceStyle == .dark ? .black : .white
}

如果值发生更改,UIEnvironment 框架会更新任何实现了 UIEnvironmentUpdating 的视图。例如,如果用户更改了外观设置,则可能会在上面的示例中发生这种情况。

final class ViewController: UIViewController {
    @UIEnvironment(\.userInterfaceStyle) private var userInterfaceStyle
    ...
}

extension ViewController: UIEnvironmentUpdating {
    func updateEnvironment() {
        view.backgroundColor = userInterfaceStyle == .dark ? .black : .white
    }
}

请参阅示例应用程序以获取更多详细信息。

您可以使用此属性包装器来读取但不能设置环境值。UIEnvironment 框架会根据系统设置自动更新某些环境值,并为其他环境值提供合理的默认值。您可以使用 UIEnvironmentable.environment(_:_:) 便利方法来覆盖其中一些值,以及设置您自定义的环境值。有关 UIEnvironment 框架提供的完整环境值列表,请参阅 UIEnvironmentValues 结构的属性。有关创建自定义环境值的信息,请参阅 UIEnvironmentKey 协议。

文档

最新版本的文档可在此处获取

安装

您可以通过将其添加为包依赖项来将 UIEnvironment 添加到 Xcode 项目中。

  1. 文件菜单中,选择添加包...
  2. 在包存储库 URL 文本字段中输入“https://github.com/nonameplum/uienvironment
  3. 取决于您的项目结构
    • 如果您有一个需要访问该库的单个应用程序目标,则直接将 UIEnvironment 添加到您的应用程序。
    • 如果您想从多个 Xcode 目标中使用此库,或者混合使用 Xcode 目标和 SPM 目标,则必须创建一个依赖于 UIEnvironment 的共享框架,然后在您的所有目标中依赖于该框架。

您可以通过将其添加为包依赖项来将 UIEnvironment 添加到 Xcode 项目中。

将 UIEnvironment 添加为依赖项

要在 SwiftPM 项目中使用 UIEnvironment 框架,请将以下行添加到您的 Package.swift 文件中的依赖项中

.package(url: "https://github.com/nonameplum/uienvironment"),

"UIEnvironment" 作为依赖项包含在您的可执行目标中

.target(name: "<target>", dependencies: [
    .product(name: "UIEnvironment", package: "uienvironment"),
]),

最后,将 import UIEnvironment 添加到您的源代码中。

许可证

此库在 MIT 许可证下发布。有关详细信息,请参阅 LICENSE