首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在SwiftUI环境中使用@AppStorage?

是否可以在SwiftUI环境中使用@AppStorage?
EN

Stack Overflow用户
提问于 2020-10-08 05:28:56
回答 1查看 685关注 0票数 2

是否可以在SwiftUI中的环境中使用@AppStorage,如果可以,您将如何操作?

我知道您可以使用@Bindings将@AppStorage的值从一个视图发送到另一个视图,我想知道是否可以将其放入环境中。我没有一个实际的例子来说明这在什么时候适用,但我想知道它是否可能。

这会疯狂到可以工作吗?我认为您将只存储值,而不会将其存储在UserDefault中。

代码语言:javascript
复制
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)
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-10-08 08:30:58

事实证明你可以。

代码语言:javascript
复制
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()
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64252567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档