my object is :
struct Order: Codable {
var item_id:String = \"\"
var quantity:Int = 0
var image:String = \"\"
var name:Strin
I use this class to solve that :
class Order: NSObject, NSCoding {
var item_id:String = ""
var quantity:String = ""
var image:String = ""
var name:String = ""
var desc:String = ""
init(item_id: String ,quantity : String , image : String , name: String, desc: String){
self.item_id = item_id
self.quantity = quantity
self.image = image
self.name = name
self.desc = desc
}
func encode(with aCoder: NSCoder) {
aCoder.encode(item_id, forKey: "item_id")
aCoder.encode(quantity, forKey: "quantity")
aCoder.encode(image, forKey: "image")
aCoder.encode(name, forKey: "name")
aCoder.encode(desc, forKey: "desc")
}
required init?(coder aDecoder: NSCoder) {
self.item_id = aDecoder.decodeObject(forKey: "item_id") as! String
self.quantity = aDecoder.decodeObject(forKey: "quantity") as! String
self.image = aDecoder.decodeObject(forKey: "image") as! String
self.name = aDecoder.decodeObject(forKey: "name") as! String
self.desc = aDecoder.decodeObject(forKey: "desc") as! String
}
}
then i use this functions to use it
class func save(value : Order){
var orderArray:[Order] = retrive()
orderArray.append(value)
let orderArrayAchived = NSKeyedArchiver.archivedData(withRootObject: orderArray)
UserDefaults.standard.set(orderArrayAchived, forKey: "orderArray")
}
class func saveListOfOrder(value: [Order]) {
print(value)
let cartArrayAchived = NSKeyedArchiver.archivedData(withRootObject: value)
UserDefaults.standard.set(cartArrayAchived, forKey: "orderArray")
}
class func retrive()-> [Order]{
let orderData = UserDefaults.standard.object(forKey: "orderArray") as? NSData
if orderData == nil
{
return [Order]()
}
let orderArray = NSKeyedUnarchiver.unarchiveObject(with: orderData! as Data) as? [Order]
return orderArray!
}