Как сохранить массив при помощи NSUserDefaults?


#1

Подскажите, как сохранять массив такого типа:
[PhoneBook.ModelNameAndPhone(name: “Тестовое имя”, phone: “Тестовый номер”)] // Это один элемент массива выведенный в консоль

Таких элементов может быть сколько угодно, и как их правильно сохранять?
Сохранить как обычный массив не получается, заранее спасибо.


#2

Как то так. Писал на скорую руку, на ошибки не проверял.

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
}

}