Swift 自己定义环境变量@Environment

16 min read

在Swift中,我们可以使用@Environment来定义环境变量。环境变量是一种特殊的变量,它们可以在整个应用程序中使用,并且可以在运行时进行更改。@Environment包含了一些系统提供的环境变量,例如颜色、字体、设备方向等,也可以通过自定义来添加自己的环境变量。

例如,我们可以在我们的应用程序中定义一个环境变量来表示用户是否已经登录:

import SwiftUI

struct ContentView: View {
    @Environment(\.isLoggedIn) var isLoggedIn
    
    var body: some View {
        if isLoggedIn {
            Text("Welcome back!")
        } else {
            Text("Please log in.")
        }
    }
}

extension EnvironmentValues {
    var isLoggedIn: Bool {
        get { self[IsLoggedInKey.self] }
        set { self[IsLoggedInKey.self] = newValue }
    }
}

struct IsLoggedInKey: EnvironmentKey {
    static let defaultValue: Bool = false
}

在上面的例子中,我们首先定义了一个ContentView,它通过@Environment注入了一个名为isLoggedIn的环境变量。接着,我们通过扩展EnvironmentValues来实现这个环境变量。在这个扩展中,我们首先定义了一个名为IsLoggedInKey的EnvironmentKey,用于存储isLoggedIn的默认值。然后,我们使用get和set方法来修改isLoggedIn的值。最后,在ContentView的body中,我们使用isLoggedIn来决定应该显示哪个文本。

需要注意的是,我们使用的是EnvironmentValues类型,这是SwiftUI提供的一个类,它包含系统内置的环境变量和我们自定义的环境变量。我们可以通过这个类型来获取或修改环境变量的值。