Swift中对象序列化的实现

来源:互联网 发布:买保险 知乎 编辑:程序博客网 时间:2024/05/16 08:05

Swift中对象序列化的实现

  在swift中要使某个类可以序列化,只需要类实现NSCoding协议,并实现协议中的一个必要的构造函数和一个方法,分别对应序列化和反序列化的二个过程。

//提供一个解码器解码数据,通过解码数据来初始化类变量required init?(coder aDecoder: NSCoder){ } //提供一个编码器编码数据func encodeWithCoder(aCoder: NSCoder){ } 


示例:
假设我们有如下类:其中的属性updateUrl为需要序列化和反序列化到User Default中

class AppParams{    var updateUrl: String? //}

继承NSObject,实现NSCoding协议:

class AppParams: NSObject, NSCoding{...}


实现序列化和反序列化函数
就是实现NSCodeing协议

//反序列化required convenience init?(coder aDeCoder: NSCoder){      self.updateUrl = aDeCoder.decodeObject(forKey: "updateUrl") as? String}    //序列化func encode(with aCoder: NSCoder) {    aCoder.encode(updateUrl, forKey: "updateUrl")}

保存和读取

//保存到user defaultlet userDefault = UserDefaults.standardlet data = NSKeyedArchiver.archivedData(withRootObject: value as Any)userDefault.setValue(data, forKey: Preferences.KEY_LAST_APP_PARAMS)//从user default中读取        let userDefault = UserDefaults.standard            guard let data = userDefault.value(forKey: Preferences.KEY_LAST_APP_PARAMS) else{return nil}return NSKeyedUnarchiver.unarchiveObject(with: data as! Data) as? AppParams
0 0