如何在SwiftUI中使用UserData可观察对象?

如何在SwiftUI中使用UserData可观察对象?,swift,xcode,swiftui,Swift,Xcode,Swiftui,在Xcode SwiftUI项目中,我有一个TextField,用户在其中写入用户名 我希望当用户关闭应用程序时,用户名将保留在内存中 因此,我创建了一个UserData.swift,其中有usilizateur和一个布尔变量: final class UserData: ObservableObject { @Published var utilisateur = "" @Published var connected = false } 在我的Cont

在Xcode SwiftUI项目中,我有一个
TextField
,用户在其中写入用户名

我希望当用户关闭应用程序时,用户名将保留在内存中

因此,我创建了一个
UserData.swift
,其中有
usilizateur
和一个布尔变量:

final class UserData: ObservableObject  {
    @Published var utilisateur = ""
    @Published var connected = false
}
在我的
ContentView
中,我写道:

@EnvironmentObject var userData: UserData
在代码中,对于每种情况,我都写了这3种可能性中的一种

self.userData.utilisateur
userData.utilisateur
userData.$utilisateur
此外,在
SceneDelegate.swift
中,我写道:

window.rootViewController = UIHostingController(rootView: contentView.environmentObject(UserData()))
问题是,当我关闭应用程序时,
usilizateur
值会被删除,而不会保留在内存中


有人知道我的错误在哪里吗?我应该怎么做才能纠正它?

您的
用户数据
没有保存在磁盘上。它保留在内存中,但当您关闭应用程序时,它就消失了。一种方法是使用
UserDefaults
保存数据:

//save
UserDefaults.standard.set(connected, forKey: "connected")

//read
let connected = UserDefaults.standard.bool(forKey: "connected")
您可以在此处找到更多信息:

要将其与现有代码集成,您可以在
@发布的
属性上使用
didSet

final class UserData: ObservableObject  {
    @Published var connected: Bool {
        didSet {
            UserDefaults.standard.set(connected, forKey: "connected")
        }
    }

    init() {
        _connected = .init(initialValue: UserDefaults.standard.bool(forKey: "connected"))
    }
}

将其存储在UserDefaults中。谢谢,您的代码表明
connected
的默认值为
false
?还是我必须把它放在某个地方?另外,我在我的UserData.swift中这样做,在我的ContentView中,我没有什么可以更改的吗?开始时,您的
UserDefaults
是空的。因此,当您搜索
connected
键时,它返回
false
。而且您不需要更改
ContentView
。整个想法是将视图与存储模型的方式分开。