我创建了一个自定义类(作为ObservedObject,因为我需要共享此数据)。 一切正常,但是当我强制关闭应用程序时,数据将重置,但我找不到任何将其保存到UserDefaults的方法。 (尝试正常保存为对象导致应用崩溃)。
如何保存此数据? (在SettingsView中按按钮时)
第一次在这里问。
-MainView ---
import SwiftUI
class ProgressData: ObservableObject {
@Published var licenseDate: Date = Date()
@Published var dayProgressValue: Float = 0.00
@Published var nightProgressValue: Float = 0.00
@Published var newDriverProgressValue: Float = 0.00
}
struct MainView: View {
let defualts = UserDefaults.standard
@ObservedObject var data = ProgressData()
var body: some View {
// App Code Here!
}
--- SettingsView ---
import SwiftUI
struct SettingsView: View {
@ObservedObject var data: ProgressData
var body: some View {
Button(action: {
// What to do in order to save it here?
})
}
谢谢。
答案 0 :(得分:0)
为此,您要做的就是确保您的自定义类正在使用Codable
协议。
class ProgressData: ObservableObject, Codable {
@Published var licenseDate: Date = Date()
@Published var dayProgressValue: Float = 0.00
@Published var nightProgressValue: Float = 0.00
@Published var newDriverProgressValue: Float = 0.00
}
下一步,您需要像这样将其保存到UserDefault:
import SwiftUI
struct SettingsView: View {
@ObservedObject var data: ProgressData
var body: some View {
Button(action: {
let encoder = JSONEncoder()
if let encoded = try? encoder.encode(data) {
UserDefaults.standard.set(encoded, forKey: "saved_data")
}
})
}
}
要从UserDefaults中提取保存的数据时,只需要做以下操作:
if let data = defaults.object(forKey: "saved_data") as? Data {
let decoder = JSONDecoder()
if let savedData = try? decoder.decode(ProgressData.self, from: data) {
// Do wantever you want with `savedData`
}
}
您可以在此wonderful article
中了解更多相关信息