SwiftUI在UserDefaults中设置字符串值,但作为`环境对象'`

SwiftUI在UserDefaults中设置字符串值,但作为`环境对象'`,swiftui,swiftui-environment,Swiftui,Swiftui Environment,Hello exist是否有一种简单的方法将值放入UserDefaults中,作为要在其他视图中显示的EnvironmentObject?类似于设置视图中的设置用户名,并显示在仪表板视图中。太多了终于找到了 答案仅基于Bool。她也是用String来做这件事的解决方案 使用选项卡视图设置的内容视图: import SwiftUI struct ContentView: View { var body: some View { VStack { T

Hello exist是否有一种简单的方法将值放入UserDefaults中,作为要在其他视图中显示的
EnvironmentObject
?类似于设置视图中的设置用户名,并显示在仪表板视图中。太多了

终于找到了

答案仅基于
Bool
。她也是用
String
来做这件事的解决方案

使用选项卡视图设置的内容视图:

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            TabView{
                Dashboard(userName: UserName())
                    .tabItem({
                        Image(systemName: "rectangle.3.offgrid")
                        Text("Dashboard")
                    })
                Settings()
                    .tabItem({
                        Image(systemName: "gear")
                        Text("Einstellungen")
                    })
            }
        }
    }
}

#if DEBUG
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif

布尔值的用户设置和字符串的用户名

import SwiftUI
import Combine


final class UserSettings: ObservableObject {

    let objectWillChange = PassthroughSubject<Void, Never>()

    @UserDefault("ShowOnStart", defaultValue: true)
    var showOnStart: Bool {
        willSet {
            objectWillChange.send()
        }
    }
}

final class UserName: ObservableObject {

    let objectWillChange = PassthroughSubject<Void, Never>()

    @UserDefault("userName", defaultValue: "UknowName")
    var userNameSet: String {
        willSet {
            objectWillChange.send()
        }
    }
}
第二视图设置设置显示在仪表板视图中的更改

import SwiftUI

struct Dashboard: View {
    @ObservedObject var settings = UserSettings()
    @ObservedObject var userName = UserName()
    var body: some View {
        VStack{
            Text("hallo")

            ExtractedViewName(userName: userName)
                ExtractedView(settings: settings)

        }
    }
}

struct Dashboard_Previews: PreviewProvider {
    static var previews: some View {
        Dashboard(userName: UserName())
    }
}

struct ExtractedView: View {
    @ObservedObject var settings : UserSettings
    var body: some View {
        VStack{
        if settings.showOnStart{
        Text("Welcome")
        }
        }
    }
}

struct ExtractedViewName: View {
    @ObservedObject var userName : UserName
    var body: some View {
        Text("Test One: \(userName.userNameSet)")
    }
}

import SwiftUI

struct Settings: View {
   @ObservedObject var settings = UserSettings()
@ObservedObject var userName = UserName()
    @State private var userTextfield = ""
    var body: some View {
        VStack {
            Toggle(isOn: $settings.showOnStart) {
                Text("Show welcome text")
            }
            TextField("Name", text: $userTextfield){
                self.userName.userNameSet = self.userTextfield
            }
            Button(action: {
                print("\(self.userName.userNameSet)")
            }) {
                Text("Button")
            }
        }
        }
}

struct Settings_Previews: PreviewProvider {
    static var previews: some View {
        Settings()
    }
}
import SwiftUI

struct Settings: View {
   @ObservedObject var settings = UserSettings()
@ObservedObject var userName = UserName()
    @State private var userTextfield = ""
    var body: some View {
        VStack {
            Toggle(isOn: $settings.showOnStart) {
                Text("Show welcome text")
            }
            TextField("Name", text: $userTextfield){
                self.userName.userNameSet = self.userTextfield
            }
            Button(action: {
                print("\(self.userName.userNameSet)")
            }) {
                Text("Button")
            }
        }
        }
}

struct Settings_Previews: PreviewProvider {
    static var previews: some View {
        Settings()
    }
}