UserDefaults不存储自定义Swift类属性

时间:2019-05-07 06:05:24

标签: swift xcode

我正在使用建议的方法 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")
}

1 个答案:

答案 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
    }
}