How to save list of object in user Default?

后端 未结 6 1293
故里飘歌
故里飘歌 2020-12-01 23:07

my object is :

 struct Order: Codable {
        var item_id:String = \"\"
        var quantity:Int = 0
        var image:String = \"\"
        var name:Strin         


        
6条回答
  •  南方客
    南方客 (楼主)
    2020-12-01 23:34

    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!
    }
    

提交回复
热议问题