我的应用程序使用一个类似于 Codable 的结构体:
public struct UserProfile: Codable {
var name: String = ""
var completedGame: Bool = false
var levelScores: [LevelScore] = []
}
使用JSONEncoder()
将编码后的UserProfile
数组保存到用户默认设置中。
在即将发布的更新中,我想向这个UserProfile
结构体添加一个新属性。有没有某种可能性?
还是说我需要创建一个新的Codable结构体,它具有相同的属性加上一个新属性,然后将所有值复制到新结构体中,并开始在之前使用UserProfile
结构体的任何地方使用这个新结构体?
如果我只是简单地向结构体添加一个新属性,那么我将无法加载先前编码的UserProfile
数组,因为该结构体将不再具有匹配的属性。当我到达用于加载保存的用户代码段时:
if let savedUsers = UserDefaults.standard.object(forKey: "SavedUsers") as? Data {
let decoder = JSONDecoder()
if let loadedUsers = try? decoder.decode([UserProfile].self, from: savedUsers) {
loadedUsers
无法解码,如果UserProfile
在编码和保存时拥有的属性不包含当前UserProfile
结构体的所有属性。
有没有更新保存的结构体属性的建议?或者我必须绕开这个问题,重新创建一个新的结构体,因为我之前没有考虑到此属性需要包含在内吗?
感谢任何帮助!