4

@AppStorage 可以在 SwiftUI 的环境中使用,如果可以,你会怎么做?

我知道您可以使用@Bindings 将@AppStorage 的值从一个视图发送到另一个视图,一般我想知道是否可以将其放入环境中。我没有关于何时适用的实际示例,但我想知道这是否可能。

这会足够疯狂吗?我认为您只会存储该值,而不会存储在 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)
    }
}
4

1 回答 1

3

事实证明你可以。

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()
    }
}
于 2020-10-08T00:30:57.793 回答