Как то так. Писал на скорую руку, на ошибки не проверял.
import Foundation
class Phone: NSObject, NSCoding {
var name: String
var phone: String
init(name: String, phone: String) {
self.name = name
self.phone = phone
}
required init?(coder aDecoder: NSCoder) {
self.name = aDecoder.decodeObject(forKey: "name") as! String
self.phone = aDecoder.decodeObject(forKey: "phone") as! String
}
func encode(with aCoder: NSCoder) {
aCoder.encode(name, forKey: "name")
aCoder.encode(name, forKey: "phone")
}
}
class Phones {
static let instance = Phones()
let savePhones = UserDefaults.standard
let saveKey = "saveKey"
var saveList:[Phone] {
get {
if let saveData = savePhones.object(forKey: saveKey) as AnyObject? {
if let saveList = NSKeyedUnarchiver.unarchiveObject(with: saveData as! Data) {
return saveList as! [Phone]
}
}
return []
}
set(save) {
let saveData = NSKeyedArchiver.archivedData(withRootObject: save)
savePhones.set(favoritesData, forKey: saveKey)
savePhones.synchronize()
}
}
func add(save: Phone) {
var saveList = self.saveList
saveList.append(save)
self.saveList = saveList
}
}