我正在使用中建议的方法
Saving custom Swift class with NSCoding to UserDefaults
存储自定义类对象。但似乎属性值没有保存——可能是由于类初始化覆盖了存储的值?或者更新后的值从未保存过?
class Test : Codable {
var testedValues: float
init () {
testedValues = 0.0
}
}
var myTest = Test()
// retrieve
if let testData = UserDefaults.standard.data(forKey: "myTest"),
let myTest = try? JSONDecoder().decode(Test.self, from: testData) {
}
//testValues is 0.0 each time the app starts up
print (myTest.testValues)
myTest.testValues += 1.0
//save in UserDefaults
if let encoded = try? JSONEncoder().encode(myTest) {
UserDefaults.standard.set(encoded, forKey: "myTest")
}
最佳答案
您已成功保存自定义类及其属性。您在这里犯的错误是您正在检索存储的值并打印新创建的实例。不要对两个实例使用相同的名称 myTest。将检索到的值存储在 myTest
if let testData = UserDefaults.standard.data(forKey: "myTest"),
let storedMyTest = try? JSONDecoder().decode(Test.self, from: testData) {
self.myTest = storedMyTest
}
要在更改时自动将 testedValues 保存在 UserDefaults 中,请使用这样的计算变量
class Test: Codable {
var testedValues: Double {
didSet {
//save in UserDefaults
if let encoded = try? JSONEncoder().encode(self) {
UserDefaults.standard.set(encoded, forKey: "myTest")
}
}
}
init () {
testedValues = 0.0
}
}
关于swift - UserDefaults 不存储自定义 Swift 类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56016416/