swift 自定义对象存储

遵守 NSSecureCoding协议

importFoundation

class ZHFilterIndexPath: NSObject,NSSecureCoding {

    static var supportsSecureCoding: Bool { return true } // 需要添加这个静态属性

    varcolumn:Int?

    varrow:Int?

    varitem:Int?

    varselected:Bool=true

    vartitle:String=""

 //  fileprivate convenience

   init(_title:String="",_selected:Bool,_column:Int,_row:Int?,_item:Int? =nil) {

        //self.init()

        self.column = column

        self.row = row

        self.item = item

        self.selected = selected

        self.title = title

    }

    funcencode(with coder:NSCoder) {

        coder.encode(column,forKey:"column")

        coder.encode(row,forKey:"row")

        coder.encode(item,forKey:"item")

        coder.encode(selected,forKey:"selected")

        coder.encode(title,forKey:"title")


    }

    requiredinit?(coder:NSCoder) {

        self.column = coder.decodeObject(forKey:"column")as?Int

        self.row = coder.decodeObject(forKey:"row")as?Int

        self.item = coder.decodeObject(forKey:"item")as?Int

        self.selected = coder.decodeBool(forKey:"selected") 

        self.title = coder.decodeObject(forKey:"title")as?String??""


    }

    overridefuncisEqual(_object:Any?) ->Bool{

        guardobjectisZHFilterIndexPathelse{

            returnfalse

        }

        letnewObj = objectas!ZHFilterIndexPath

        ifself.column == newObj.column &&self.row == newObj.row &&self.item == newObj.item &&self.title == newObj.title {

            returntrue

        }

        return false

    }


    override var description: String{

        get{

            return"ZHFilterIndexPath:(title:\(title)selected:\(selected)column:\(column ??-1),row:\(row ??-1),item:\(item ??-1))"

        }

    }


    classfuncindexOf(title:String="",selected:Bool,_column:Int,_row:Int?,_item:Int? =nil) ->ZHFilterIndexPath{

        letindexPath = ZHFilterIndexPath.init(title,selected,column, row, item)

        returnindexPath

    }

}

存储方式直接存储自定义对象

       let manager = FileManager.default

        var url = manager.urls(for: .documentDirectory, in: .userDomainMask).first

        url?.appendPathComponent("path.txt")

        let datawrite =  NSKeyedArchiver.archivedData(withRootObject:index)

        try? datawrite.write(to: url!)


        if let dataread  = try? Data(contentsOf: url!){

            let array = NSKeyedUnarchiver.unarchiveObject(with: dataread) as! ZHFilterIndexPath

               print("********\(array)******\(selectedCollectionViewIndexPaths)")

        }

自定义对象加入数组后存储

            UserDefaults.standard.setValue(NSKeyedArchiver.archivedData(withRootObject: selectedCollectionViewIndexPaths), forKey:"personssub")

            UserDefaults.standard.synchronize()

        //unarchiveObjectWithData(userDefaults.objectForKey("persons")

            letarray = NSKeyedUnarchiver.unarchiveObject(with: UserDefaults.standard.object(forKey:"personssub")as!Data)as! [ZHFilterIndexPath]

            print("^^^^^^^^^^^^^^^^^^^^^^^^^^\(array)")

你可能感兴趣的:(swift 自定义对象存储)