gpt4 book ai didi

swiftui - 如何从 SwiftUI 2.0 中的多个其他 View 访问和编辑 @AppStorage 变量?

转载 作者:行者123 更新时间:2023-12-05 00:55:33 24 4
gpt4 key购买 nike

有没有更好的方法来做到这一点?有没有办法访问环境中的 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")")
}
}

最佳答案

通过在不同 View 中使用 @AppStorage,您仍然可以访问相同的 UserDefaults.standard 存储(除非您明确指定 suiteName)。

这意味着您可以直接在 subview 中使用 @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
}

注意:默认的 darkMode 值已提取(到 DefaultSettings 枚举),因此您不会在每个 View 中重复 false


或者,您可以将 @AppStorage 直接注入(inject) environment。见:

关于swiftui - 如何从 SwiftUI 2.0 中的多个其他 View 访问和编辑 @AppStorage 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64117138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com