Swift中对象序列化的实现

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 default
let userDefault = UserDefaults.standard
let 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值