我正在使用建议的方法
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")
}
答案 0 :(得分:1)
您已经成功保存了自定义类及其属性。您在这里犯的错误是您要检索存储的值并打印新创建的实例。两个实例都不要使用相同的名称 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
}
}