如何在 SwiftUI 中使用 UserData Observable Object?



在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"))
}
}

最新更新