Swift - 如何将本地存储的对象数组(文件管理器)转换为更新的对象数组? (具有附加属性)

Swift - how to convert an array of objects stored locally (filemanager) to a newer one? (with added attributes)

所以我一直在研究这个,但仍然一无所获。 基本上,我有一个存储到文件管理器的对象数组。对象,比如 User,有 2 个属性。

class User {
    let firstName: String
    let lastName: String
}

根据新的更新,我添加了新的属性。

class User {
    let firstName: String
    let lastName: String
    let age: Int
}

文件管理器仍然能够识别文件并读取它。但由于它们现在不同了,我无法对我的视图控制器执行检查。例如,我想检查这个新用户是否存在于存储的数组中。它将 return false 因为它们不同。 有帮助吗?

编辑: 我的 class 确实有并且 id

class User: Codable, Equatable, Identifiable {
    var id: { firstName }
   // rest of attributes
}

编辑2: 这是我存储和加载数据 class

import Foundation
import UIKit

struct DataPersistEngine {

    var users: [User] = []


    struct SavedData: Codable {
        let users: [User]

    }

    private let filePath: URL
    private let encoder = JSONEncoder()
    private let decoder = JSONDecoder()

    init() {
        do {
            filePath = try FileManager.default.url(for: .documentDirectory,
                                                   in: .userDomainMask,
                                                   appropriateFor: nil,
                                                   create: false).appendingPathComponent("SavedDatas")
            if let data = try? Data(contentsOf: filePath) {
                decoder.dataDecodingStrategy = .base64
                let savedData = try decoder.decode(SavedData.self, from: data)
                self.users = savedData.users
            }
        } catch let error {
            fatalError(error.localizedDescription)
        }
    }

    mutating func saveUser(user: User) {
        if users.contains(user) {
            users.removeAll(where: { [=14=] == user })
        } else {
            users.append(user)
        }
        save()
    }


    private func save() {
        do {
            let savedData = SavedData(users: users)
            let data = try encoder.encode(savedData)
            try data.write(to: filePath, options: .atomicWrite)
        } catch let error {
            print("Error while saving datas: \(error.localizedDescription)")
        }
        encoder.dataEncodingStrategy = .base64
    }

}

实现你自己对什么使两个对象相等的定义

extension User {
    static func == (lhs: User , rhs: User) -> Bool {
        return lhs.firstName == rhs.firstName && lhs.lastName == rhs.lastName
    } 
}