在 Swift 中,@Environment
是一个属性包装器,它允许您从视图层次结构中访问环境值。环境值是在视图外部设置的值,并且对其所有后代都可用。
例如,您可能会定义一个控制应用中所有文本的字体大小的环境值。然后,您可以使用 @Environment
属性包装器从应用中的任何视图访问此值,并使用它来设置该视图中显示的文本的字体大小。
要使用 @Environment
属性包装器,您首先需要定义一个 EnvironmentKey
类型,该类型指定您希望访问的环境值的类型。然后,您可以使用此密钥在视图中访问环境值。
下面是在视图中如何使用 @Environment
属性包装器的示例:
struct MyView: View {
@Environment(\.fontSize) var fontSize: CGFloat
var body: some View {
Text("Hello, World!")
.font(.system(size: fontSize))
}
}
在此示例中,fontSize
属性设置为 fontSize
环境值的值,该值在 MyView
结构外设置。然后,您可以使用 fontSize
属性来设置视图中显示的文本的字体大小。
您还可以通过向 @Environment
属性包装器提供默认值来为环境值设置
使用反斜杠访问的 fontSize
环境值的值
在这个例子中,fontSize
属性被设置为使用反斜杠访问的 fontSize
环境值的值。然后,fontSize
环境值的值用于设置视图中显示的文本的字体大小。
如果没有反斜杠,则必须调用 EnvironmentKey
类型的 fontSize
键来访问 fontSize
环境值的值,如下所示:
struct MyView: View {
@Environment(EnvironmentKey.fontSize) var fontSize: CGFloat
var body: some View {
Text("Hello, World!")
.font(.system(size: fontSize))
}
}
使用反斜杠可以更轻松,更简洁地访问 fontSize
环境值的值。
EnvironmentKey
的值通常在使用该键的视图层次结构之外设置
EnvironmentKey
的值通常在使用该键的视图层次结构之外设置。这样就可以将值设置一次,并使其对层次结构中所有需要它的视图都可用。
要设置 EnvironmentKey
的值,您需要创建该键的实例并为其分配一个值。然后,您可以将此实例传递给视图的 environment
方法,该方法将为视图的所有后代设置键的值。
下面是在 SwiftUI 应用中如何设置 EnvironmentKey
的值的示例:
Copy code
struct ContentView: View {
var body: some View {
MyView()
.environment(\.fontSize, 20)
}
}
struct MyView: View {
@Environment(\.fontSize) var fontSize: CGFloat
var body: some View {
Text("Hello, World!")
.font(.system(size: fontSize))
}
}
在此示例中,fontSize
环境键的值设置为 20
,用于 MyView
及其所有后代。然后,可以使用 MyView
结构中的 @Environment
属性包装器访问此值。
您还可以在应用的 SceneDelegate
类中为 EnvironmentKey
设置全局值。这样就可以在应用的所有视图中使用 @Environment
属性包装器访问该值。