保存后更改 NSUserDefaults class 属性 (Swift)
Changing NSUserDefaults class properties after save (Swift)
假设我有一个这样定义的自定义对象:
class Person {
firstName:String,
lastName:String,
age:Int
}
发布一个应用版本后,说我想添加一个gender:String
属性。即使当前 class 不包含性别 属性,我该怎么做?
您可以在应用程序的未来版本中添加它。
首先,更新你的 Person class,然后你可以设置一个值 versionOfLastRun
并检查它是否为 nil。在这种情况下,您检查是否已经有一个人保存在 NSUserDefaults 中,如果是,那么您创建一个 class 的新实例以保存在 NSUserDefaults 中,性别和您覆盖之前的 Person 对象。
let currentVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String
let versionOfLastRun = UserDefaults.standard.value(forKey: "VersionOfLastRun") as? String
if versionOfLastRun == nil {
if (UserDefaults.standard.value(forKey: "Person") as? Person) != nil {
let newPerson = Person( //... )
UserDefaults.standard.set(currentVersion, forKey: "Person")
} else {
print("First run")
}
} else if !(versionOfLastRun! == currentVersion) {
print("App updated")
// Upgrade your model
} else {
print("Nothing changed since last run")
}
UserDefaults.standard.set(currentVersion, forKey: "VersionOfLastRun")
在应用程序的下一版本中,如果您想升级数据模型,您可以通过检查最后一个 运行 的版本来执行此操作。
希望这能回答您的问题。
假设我有一个这样定义的自定义对象:
class Person {
firstName:String,
lastName:String,
age:Int
}
发布一个应用版本后,说我想添加一个gender:String
属性。即使当前 class 不包含性别 属性,我该怎么做?
您可以在应用程序的未来版本中添加它。
首先,更新你的 Person class,然后你可以设置一个值 versionOfLastRun
并检查它是否为 nil。在这种情况下,您检查是否已经有一个人保存在 NSUserDefaults 中,如果是,那么您创建一个 class 的新实例以保存在 NSUserDefaults 中,性别和您覆盖之前的 Person 对象。
let currentVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String
let versionOfLastRun = UserDefaults.standard.value(forKey: "VersionOfLastRun") as? String
if versionOfLastRun == nil {
if (UserDefaults.standard.value(forKey: "Person") as? Person) != nil {
let newPerson = Person( //... )
UserDefaults.standard.set(currentVersion, forKey: "Person")
} else {
print("First run")
}
} else if !(versionOfLastRun! == currentVersion) {
print("App updated")
// Upgrade your model
} else {
print("Nothing changed since last run")
}
UserDefaults.standard.set(currentVersion, forKey: "VersionOfLastRun")
在应用程序的下一版本中,如果您想升级数据模型,您可以通过检查最后一个 运行 的版本来执行此操作。
希望这能回答您的问题。