для магазина, и хотел создать протокол сразу для обоих
protocol LocalDatabaseProtocol: AnyObject {
func saveProduct<T: Codable>(flower: T)
func searchFlower<T: Codable>(id: Int, flower: T) -> T?
func getFlowers<T: Codable>() -> [T]
func deleteFlower<T: Codable>(id: Int, flower: T)
}
Типа этого, но мне же их надо же типа их по id получать
func getFlowers() -> [FlowerBasketModel]{
let defaults = UserDefaults.standard
let myarray = defaults.codableObject(dataType: [FlowerBasketModel.self], key: flowerBaseKey)
return myarray
}
func searchFlower(id: Int) -> FlowerBasketModel? {
return getFlowers().first(where: {$0.id == id})
}
А с «Т» так не получиться, получается мне нужно создать отдельно два класса от «LocalDatabaseProtocol» и в каждом писать так ?
func getFlowers<T>(flower: T.Type) -> [Any]? where T : Decodable, T : Encodable {
let defaults = UserDefaults.standard
let myarray = defaults.codableObject(dataType: [flower], key: flowerBaseKey)
return myarray as! [FlowerBasketModel]
}
Ну насколько я понимаю твою идею тебе надо класс дженерик , который управляет хранением, где T должно быть codable и иметь id.
Обсуждают сегодня