Проблема в том, что favoritesDictionary
это не Dictionary :]
class Favorite:NSObject, NSCoding {
var name:String
var r:Int
var g:Int
var b:Int
var hex:String
var hsb:String
var cmyc:String
init(name: String, r: Int, g: Int, b: Int, hex: String, hsb: String, cmyc: String) {
self.name = name
self.r = r
self.g = g
self.b = b
self.hex = hex
self.hsb = hsb
self.cmyc = cmyc
}
required init?(coder aDecoder: NSCoder) {
self.name = aDecoder.decodeObject(forKey: "name") as! String
self.r = aDecoder.decodeInteger(forKey: "r")
self.g = aDecoder.decodeInteger(forKey: "g")
self.b = aDecoder.decodeInteger(forKey: "b")
self.hex = aDecoder.decodeObject(forKey: "hex") as! String
self.hsb = aDecoder.decodeObject(forKey: "hsb") as! String
self.cmyc = aDecoder.decodeObject(forKey: "cmyc") as! String
}
func encode(with aCoder: NSCoder) {
aCoder.encode(name, forKey: "name")
aCoder.encode(r, forKey: "r")
aCoder.encode(g, forKey: "g")
aCoder.encode(b, forKey: "b")
aCoder.encode(hex, forKey: "hex")
aCoder.encode(hsb, forKey: "hsb")
aCoder.encode(cmyc, forKey: "cmyc")
}
}
Ну и подредактируем ваш класс Favorites
class Favorites {
static let instance = Favorites()
let saveFavorites = UserDefaults.standard
let favoritesKey = "FavoritesKey"
var favoritesList:[Favorite] {
get {
if let favoritesData = saveFavorites.object(forKey: favoritesKey) as AnyObject? {
if let favoritesList = NSKeyedUnarchiver.unarchiveObject(with: favoritesData as! Data) {
return favoritesList as! [Favorite]
}
}
return []
}
set(favorites) {
let favoritesData = NSKeyedArchiver.archivedData(withRootObject: favorites)
saveFavorites.set(favoritesData, forKey: favoritesKey)
saveFavorites.synchronize()
}
}
func add(favorite: Favorite) {
var favoritesList = self.favoritesList
favoritesList.append(favorite)
self.favoritesList = favoritesList
}
func delete(favorite:Favorite) {
/// удаление элемента
}
}
Ну и в вашем контроллере можно сделать что-то подобное
let newFavorite = Favorite(name: "color", r: 0, g: 0, b: 0, hex: "0", hsb: "0", cmyc: "0")
favorites.add(favorite: newFavorite)