在Xcode SwiftUI项目中,我有一个TextField,用户在里面写了用户名。我希望当用户关闭应用程序时,该用户名将被保存在内存中。
所以,我创建了一个UserData.swift,其中有以下内容 utilisateur
和一个布尔变量。
import SwiftUI
import Combine
final class UserData: ObservableObject {
@Published var utilisateur = ""
@Published var connected = false
}
在我的 ContentView
我写了这个。
@EnvironmentObject var userData: UserData
在代码中,每一种情况我都写了这三种可能性中的一种。
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")
您可以在这里找到更多信息。
要将它与您现有的代码集成,您可以使用 didSet
在你 @Published
财产。
final class UserData: ObservableObject {
@Published var connected: Bool {
didSet {
UserDefaults.standard.set(connected, forKey: "connected")
}
}
init() {
_connected = .init(initialValue: UserDefaults.standard.bool(forKey: "connected"))
}
}