swift - UserDefaults 不存储自定义 Swift 类属性

标签 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")
}

最佳答案

您已成功保存自定义类及其属性。您在这里犯的错误是您正在检索存储的值并打印新创建的实例。不要对两个实例使用相同的名称 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/

相关文章:

ios - 从数组中检索 TableView 单元格标签的值

arrays - 如何从一个可观察对象数组创建一个数组的可观察对象?

ios - 'AnyObject' 没有成员 "contactUID"即使 Intelitype 说它有?

html - 如何在 swift 2 的浏览器中加载 HTML 字符串?

swift - Xcode Swift 在 tableView 中显示来自 CloudKit 的数据

ios - 这段 Swift 代码是否等效?

xcode - 如何在 Xcode 8 中关闭线条突出显示或编辑其颜色?

ios - 使用 unwind segues 时未在所有 View Controller 上调用 Dealloc

ios - 如何获取在 Xcode 的背景中选择的颜色代码?

iphone - 点击状态栏时 Phonegap Xcode iOS 应用程序崩溃