如何在SwiftUI中使用UserData可观察对象?
在Xcode SwiftUI项目中,我有一个如何在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
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
。整个想法是将视图与存储模型的方式分开。