Oi Giuliano, tudo bem?
Anualmente o Swift sofre alterações, e uma delas foi com o KeyedArchiver e o KeyedUnarchiver
Segue um exemplo para salvar objetos:
func saveProducts() {
do {
guard let mainPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }
let path = mainPath.appendingPathComponent("products")
do {
let data = try NSKeyedArchiver.archivedData(withRootObject: productList, requiringSecureCoding: false)
try data.write(to: path)
}
catch {
print(error.localizedDescription)
}
}
}
Nesse exemplo, o que se difere da aula, é que transformamos o array em data e depois chamamos o método write.
Para recuperar:
func getProducts() {
guard let mainPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }
let path = mainPath.appendingPathComponent("products")
do {
let data = try Data(contentsOf: path)
if let productList = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? [Product] {
// Aqui utilizamos a lista de produtos
}
} catch {
print(error.localizedDescription)
}
}
Primeiro, recuperamos o arquivo do tipo data salvo anteriormente (baseado no caminho que criamos). Com o arquivo em mãos, podemos chamar o método NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data)
e fazer o casting para o tipo de objeto.
Testa aí qualquer dúvida me avisa.
Abs.