swift - 如何在 SwiftUI 中使用 UserData 可观察对象?
问题描述
在 Xcode SwiftUI 项目中,我有一个TextField
用户在其中写入用户名。
我希望用户关闭应用程序时将用户名保存在内存中。
所以,我创建了UserData.swift
一个utilisateur
where 和一个 boolean var :
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"))
}
}
推荐阅读
- java - 如何使用 DataBinding 获取 Item recyclerview 的位置?
- mustache - 是否可以将 DOT 作为 JSON 中与 Mustache 一起使用的字段名称的一部分?
- matlab - 无效的 MEX 文件“/home/caffe/matlab/+caffe/private/caffe_.mexa64”:/usr/local/lib/libopencv_imgcodecs.so.3.4:未定义符号:
- google-apps-script - 创建一个扫描应用程序以发送到工作表以跟上每天的出勤率,并在创建后完成所有这些操作而无需我弄乱它
- python - 有什么方法可以组合 2 个熊猫数据框吗?
- python - 在 python 中,是否有理由将 self 传递给类中的静态方法?
- php - codeigniter 问题,我不知道我的 MVC 出了什么问题
- javascript - FullCalendar 4,在重新获取之前清除事件
- javascript - 按日期排序对象数组无法正常工作,忽略年份值
- python - 带有 Django Python 的水晶报表