在Xcode SwiftUI项目中,我有一个用户在其中写入用户名的TextField
。
我希望当用户关闭应用程序时,用户名将保留在内存中。
因此,我创建了一个UserData.swift
,其中有utilisateur
和布尔变量:
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()))
问题是当我关闭应用程序时,utilisateur
值被删除并且不会保留在内存中。
有人知道我的错误在哪里,我应该怎么做才能纠正它吗?
您的UserData
不会保存在磁盘上。它保留在内存中,但当您关闭应用程序时,它就消失了。一种方法是使用以下UserDefaults
来持久保存数据:
//save
UserDefaults.standard.set(connected, forKey: "connected")
//read
let connected = UserDefaults.standard.bool(forKey: "connected")
您可以在此处找到更多信息:
- 使用用户默认值存储用户设置
- 用户默认值的 Apple 文档
若要将其与现有代码集成,可以在@Published
属性上使用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"))
}
}