【发布时间】:2020-04-20 19:50:48
【问题描述】:
我的应用使用这样的可编码结构:
public struct UserProfile: Codable {
var name: String = ""
var completedGame: Bool = false
var levelScores: [LevelScore] = []
}
JSONEncoder() 已用于将 UserProfiles 的编码数组保存为用户默认值。
在即将到来的更新中,我想为这个UserProfile 结构添加一个新属性。这在某种程度上可能吗?
或者我是否需要创建一个具有相同属性和一个新属性的新 Codable 结构,然后将所有值复制到新结构中,然后开始使用该新结构代替 UserProfile struct 以前用过吗?
如果我只是向结构添加一个新属性,那么我将无法加载UserProfiles 的先前编码数组,因为该结构将不再具有匹配的属性。当我得到这个代码来加载保存的用户时:
if let savedUsers = UserDefaults.standard.object(forKey: "SavedUsers") as? Data {
let decoder = JSONDecoder()
if let loadedUsers = try? decoder.decode([UserProfile].self, from: savedUsers) {
如果UserProfile 在编码和保存时所具有的属性不包含UserProfile 结构的所有当前属性,则loadedUsers 不会解码。
对更新保存的结构属性有什么建议吗?还是我必须走很长的路重新创建,因为我之前没有提前计划要包含这个属性?
感谢您的帮助!
【问题讨论】:
-
你应该可以添加一个属性,只要它是可选的
标签: ios swift struct properties userdefaults