@AppStorage può essere utilizzato nell'ambiente in SwiftUI?
Oct 08 2020
@AppStorage può essere utilizzato nell'ambiente in SwiftUI, in tal caso, come lo faresti?
So che puoi inviare il valore per @AppStorage da una vista all'altra usando @Bindings come domanda generale, vorrei sapere se è possibile metterlo nell'ambiente. Non ho un esempio pratico di quando questo sarebbe applicabile, ma mi chiedevo se fosse possibile.
Sarebbe abbastanza folle da funzionare? Penso che memorizzerai solo il valore e non verrà memorizzato in UserDefault.
struct RootView: View {
@AppStorage("userPreferredDisplayMode") private var userPreferredDisplayMode: String = "automatic"
@Environment(\.userPreferredDisplayMode) private var envUserPreferredDisplayMode: String
var body: some View {
Text(title)
.environment(\.userPreferredDisplayMode, envUserPreferredDisplayMode)
}
}
Risposte
2 Mark Oct 08 2020 at 07:30
Si scopre che puoi.
struct CustomTextKey: EnvironmentKey {
static var defaultValue: Binding<String> = Binding.constant("Default Text")
}
extension EnvironmentValues {
var customText: Binding<String> {
get { self[CustomTextKey.self] }
set { self[CustomTextKey.self] = newValue }
}
}
struct ContentView: View {
@AppStorage("text") private var text: String = ""
var body: some View {
TextEditor(text: $text).padding() Divider() SecondView() .environment(\.customText, $text)
}
}
struct SecondView: View {
var body: some View {
ThirdView()
}
}
struct ThirdView: View {
@Environment(\.customText) private var text: Binding<String>
var body: some View {
TextEditor(text: text).padding()
}
}