在 SwiftUI 中,我们可以使用 @Environment 来访问 App 中的一些共享属性,例如主题颜色、语言环境等。但是,有时候我们可能需要自定义一个环境变量,以便在 App 中使用。
下面是一个示例,演示如何自定义一个名为 myEnvironment 的环境变量:
// 定义一个自定义环境变量
private struct MyEnvironmentKey: EnvironmentKey {
static let defaultValue: String = "default value"
}
extension EnvironmentValues {
var myEnvironment: String {
get { self[MyEnvironmentKey.self] }
set { self[MyEnvironmentKey.self] = newValue }
}
}
// 在某个 View 中使用自定义环境变量
struct MyView: View {
@Environment(\.myEnvironment) var myValue: String
var body: some View {
Text("My value is: \(myValue)")
}
}
// 在 App 初始化时设置自定义环境变量的值
@main
struct MyApp: App {
private var myEnvironment = "my custom value"
var body: some Scene {
WindowGroup {
MyView()
.environment(\.myEnvironment, myEnvironment)
}
}
}
在上面的代码中,我们首先定义了一个名为 MyEnvironmentKey 的自定义环境变量,它的默认值是字符串 "default value"。接着,我们扩展了 EnvironmentValues 结构体,添加了一个名为 myEnvironment 的计算属性,用于访问我们自定义的环境变量。
然后在 MyView 中使用 @Environment(.myEnvironment) var myValue 来获取环境变量的值,并在 Text 中显示出来。最后,在 App 初始化时设置自定义环境变量的值,使用 .environment(.myEnvironment, myEnvironment) 将其传递给 MyView。
这样,我们就成功地定义并使用了一个自定义的环境变量。