Back to home

SwiftUI 如何自定义环境变量@Environment?

21 min read

在 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。

这样,我们就成功地定义并使用了一个自定义的环境变量。