Swift语言精要 - 序列化和反序列化

本文介绍如何在Swift中实现对象的序列化与反序列化。通过实现NSObject和NSCoding协议,可以将对象转换为NSData,便于持久化存储或网络传输。文中详细解释了NSKeyedArchiver和NSKeyedUnarchiver的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在swift中你可以把一个对象转换成为数据,你所要做的就是

首先,你需要让对象实现NSObject和NSCoding协议。

其次,实现以下两个方法:

  encodeWithCoder

  init(coder aDecoder: NSCoder)  // 一个带NSCoder参数的初始化器

例子代码:

class SerializableObject : NSObject, NSCoding {
    var name : String?
    func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encodeObject(name!, forKey:"name")
    }
    override init() {
        self.name = "My Object"
    }
    required init(coder aDecoder: NSCoder) {
        self.name = aDecoder.decodeObjectForKey("name") as? String
    }
}

如果对象实现了NSCoding协议,那么它就能被转换成为NSData对象。

NSKeyedArchiver - 序列化

NSKeyedUnarchiver - 反序列化

例子代码:

let anObject = SerializableObject()
anObject.name = "My Thing That I'm Saving"

// Converting it to data
let objectConvertedToData = NSKeyedArchiver.archivedDataWithRootObject(anObject)

// Converting it back
// Note that the conversion might fail, so 'unarchiveObjectWithData' returns
// an optional value. So, use 'as?' to check to see if it worked.
let loadedObject = NSKeyedUnarchiver.unarchiveObjectWithData(objectConvertedToData)
    as? SerializableObject

print(loadedObject?.name) //"My Thing That I'm Saving"

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值