@AppStorage, SwiftUI ortamında kullanılabilir mi?

Oct 08 2020

@AppStorage, SwiftUI ortamında kullanılabilir mi, öyleyse nasıl yaparsınız?

@ AppStorage değerini bir görünümden diğerine @Bindings kullanarak gönderebileceğinizi biliyorum, genel bir merak olarak bunu ortama koymanın mümkün olup olmadığını bilmek istiyorum. Bunun ne zaman uygulanabilir olacağına dair pratik bir örneğim yok, ancak bunun mümkün olup olmadığını merak ediyordum.

Bu işe yarayacak kadar çılgınca olur mu? Bence değeri yalnızca depolayacaksınız ve UserDefault'ta saklanmayacak.

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)
    }
}

Yanıtlar

2 Mark Oct 08 2020 at 07:30

Yapabileceğin ortaya çıktı.

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()
    }
}