有一个更好的方法吗?有没有办法访问环境中的UserDefaults??我做了以下事情:
struct ContentView: View {
@AppStorage("darkMode") var darkMode = false
var body: some View {
SubView(darkMode: $darkMode)
}
}
}
struct SubView: View {
@Binding var darkMode: Bool
var body: some View {
Text("Dark Mode is \(darkMode == true ? "on" : "off")")
}
}
Run Code Online (Sandbox Code Playgroud)
通过@AppStorage在不同的视图中使用,您仍然可以访问相同的UserDefaults.standard存储(除非您明确指定suiteName)。
这意味着您可以@AppStorage直接在子视图中使用。
struct ContentView: View {
@AppStorage("darkMode") var darkMode = DefaultSettings.darkMode
var body: some View {
VStack {
Button("Toggle dark mode") {
self.darkMode.toggle()
}
SubView()
}
.colorScheme(darkMode ? .dark : .light)
.preferredColorScheme(darkMode ? .dark : .light)
}
}
struct SubView: View {
@AppStorage("darkMode") var darkMode = DefaultSettings.darkMode
var body: some View {
Text("Dark Mode is \(darkMode == true ? "on" : "off")")
}
}
enum DefaultSettings {
static let darkMode = false
}
Run Code Online (Sandbox Code Playgroud)
注意:默认darkMode值被提取(到DefaultSettings枚举)所以你不要false在每个视图中重复。
或者,您可以@AppStorage直接注入environment. 看:
| 归档时间: |
|
| 查看次数: |
1070 次 |
| 最近记录: |