Итак, я исследовал это и все еще ни к чему не привел. По сути, у меня есть массив объектов, которые я сохранил в файловом менеджере. У объекта, скажем, User, есть 2 атрибута.
class User {
let firstName: String
let lastName: String
}
После новых обновлений я добавил новый атрибут.
class User {
let firstName: String
let lastName: String
let age: Int
}
Filemanager все еще может идентифицировать файл и читать его. Но поскольку теперь они разные, я не могу проверить свой контроллер представления. Например, я хочу проверить, существует ли этот новый пользователь внутри сохраненных массивов. Он вернет false, поскольку они разные. Любая помощь?
изменить: у моего класса есть и идентификатор
class User: Codable, Equatable, Identifiable {
var id: { firstName }
// rest of attributes
}
изменить 2: вот мое хранение и загрузка класса данных
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: { $0 == 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
}
}