©️ OverlookArt
首页 / AppleDeveloper / SwiftUI / Environment Values

Environment Values

概述

EnvironmentValues 是一个结构体,包含了一组环境变量,这些变量可以在 SwiftUI 视图层次结构中传递数据。环境变量用于在视图之间共享信息,而无需显式地将数据传递给每个视图。

SwiftUI 提供了一些预定义的环境变量,例如 colorSchemelocalesizeCategory 等。您还可以创建自定义的环境变量,以便在视图层次结构中传递特定的数据。

使用

在任何视图中使用 @Environment 属性包装器声明一个属性,并指定值的路径,通过该属性访问环境变量的值。

1struct ContentView: View {
2    @Environment(\.locale) var locale: Locale
3}

要设置环境变量的值,可以使用 environment 修饰符将其应用于视图层次结构中的某个视图。

1struct ContentView: View {
2    var body: some View {
3        Text("Hello, World!")
4            .environment(\.locale, Locale(identifier: "fr"))
5    }
6}

系统的环境变量

  • layoutDirection:布局方向。
  • controlSize:应用于视图中控件的大小。
  • multilineTextAlignment:当内容换行或包含换行符时,文本视图如何对齐其行。
  • truncationMode:如何截断最后一行文本以适应可用空间。
  • lineSpacing:行间距。
  • allowsTightening:字符间距是否应收紧以将文本放入可用空间。
  • minimumScaleFactor:缩小字体大小的最小允许比例,以使文本适应可用空间。
  • textCase:使用环境的区域设置,在显示时转换文本大小写的风格覆盖。
  • lineLimit:文本在视图中可以占用的最大行数。
  • dynamicTypeSize:当前动态类型大小,此值会随着用户选择的动态类型大小的变化而变化。默认值取决于设备。
  • headerProminence:应用于视图中的分组标题的突出性。
  • symbolVariants:在此环境中使用的符号变体。
  • font:此环境的默认字体。
  • imageScale:此环境的图像缩放比例。默认值取决于设备。
  • displayScale:此环境的显示比例。默认值取决于设备。
  • pixelLength:设备屏幕上像素的大小。
  • legibilityWeight:应用于文本的字体粗细。
  • locale:当前区域。
  • calendar:当前日历。
  • timeZone:当前时区。
  • horizontalSizeClass:水平朝向时的尺寸类
  • verticalSizeClass:垂直朝向时的尺寸类

自定义环境变量

EnvironmentValues 结构体进行扩展,用 @Entry 声明一个属性,属性名为自定义环境变量的名称,属性类型为环境变量的类型,并提供一个默认值。然后在视图中像使用系统的环境变量一样使用它。

 1/// 自定义环境变量
 2extension EnvironmentValues {
 3    @Entry var customValue: String = "Default"
 4}
 5
 6/// 使用环境变量
 7struct ContentView: View {
 8    @Environment(\.customValue) var customValue: String
 9    var body: some View {
10        Text(customValue)
11    }
12}