@Environment
是 SwiftUI 中的一個屬性包裝器,用於從環境中讀取共享的資料。環境(Environment)是一個全域性的、可以在檢視層次結構中傳遞的值集合。透過使用 @Environment
,你可以在檢視中訪問這些共享的環境值,而不需要顯式地傳遞它們。
@Environment
的常見用途包括訪問系統提供的環境值(如顏色方案、字型、尺寸類別等),以及自定義的環境值。
以下是 @Environment
的一些常見用途和示例:
訪問系統提供的環境值
import SwiftUI
struct ContentView: View {
@Environment(\.colorScheme) var colorScheme
var body: some View {
Text("當前顏色方案是 \(colorScheme == .dark ? "暗色模式" : "亮色模式")")
.padding()
.background(colorScheme == .dark ? Color.black : Color.white)
.foregroundColor(colorScheme == .dark ? Color.white : Color.black)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
在這個示例中,@Environment(\.colorScheme)
用於訪問當前的顏色方案(亮色模式或暗色模式),並根據顏色方案動態調整檢視的背景色和前景色。
自定義環境值
你還可以建立和使用自定義的環境值。首先,定義一個環境鍵和預設值:
import SwiftUI
struct CustomEnvironmentKey: EnvironmentKey {
static let defaultValue: String = "預設值"
}
extension EnvironmentValues {
var customValue: String {
get { self[CustomEnvironmentKey.self] }
set { self[CustomEnvironmentKey.self] = newValue }
}
}
然後,在檢視中使用 @Environment
訪問自定義的環境值:
struct ContentView: View {
@Environment(\.customValue) var customValue
var body: some View {
Text("自定義環境值: \(customValue)")
.padding()
}
}
struct ParentView: View {
var body: some View {
ContentView()
.environment(\.customValue, "新的自定義值")
}
}
struct ParentView_Previews: PreviewProvider {
static var previews: some View {
ParentView()
}
}
在這個示例中,我們定義了一個自定義的環境鍵 CustomEnvironmentKey
和一個擴充套件 EnvironmentValues
來新增 customValue
屬性。然後,我們在 ParentView
中使用 .environment
修飾符來設定自定義的環境值,並在 ContentView
中透過 @Environment
訪問這個值。
透過使用 @Environment
,你可以在檢視層次結構中方便地共享和訪問全域性資料,而不需要顯式地傳遞這些資料。