swift 之归档和解归档
2024-10-15 19:24:04
swift 之归档和解归档
数据持久化的方式有很多种,归档是其中的一种,说起数据持久化的方式,iOS 中基本有以下几种方式:sqlite存储、coredata存储、UserDefault存储、归档、plist存储、还有就是直接写入文件中。
其实归档也是将数据写入文件中,不同的是,归档是对于“对象”而言的,也就是我们将对象归档之后,归档成一个Data的类型,然后再将其写入文件中,提取的时候直接解归档就能获得想要的对象。
在用objective-c语言的时候,我想归档和解归档的思路都很清晰,那么在swift中这种思路依然是没有变得,但是有些小细节需要我们注意一下。归档和解归档的一般思路就是:
1.遵循NSCoding协议,并且实现两个必须的方法
2.应用NSKeyedArchiver归档一个对象
3.应用NSUnkeyedArchiver解归档一个对象
- 用到了三个类和一个协议
1>NSCoding协议,这个协议要求我们必须实现两个方法,一个是用来归档的-func encode(with aCoder: NSCoder) {}, 另外一个是用来解归档的方法required init?(coder aDecoder: NSCoder) {
super.init()
}
2>其中我们看到用到的一个类-NSCoder:这是一个专门用来归档对象属性和解归档的类
3> 还有两个比较重要的类
NSKeyedArchiver,这是一个归档类,我们可以使用他去归档一个文件,我们可以用NSKeyedArchiver.archiveRootObject(self, toFile: newPath!) 这个方法直接归档并且存入文件,也可以open class func archivedData(withRootObject rootObject: Any) -> Data 先生成data,然后自己写入文件,我比较喜欢第一种简单方便。
NSUnkeyedArchiver,这是一个解归档类,可以用NSKeyedUnarchiver.unarchiveObject(withFile: newPath!)这个方法直接获取OBject
需要注意的是:如果对象属性中有基本类型是可选类型的在解归档的时候会crash,告知解归档解出来的类型不是这个基本类型,因为他是可选类型,我的解决办法是如果能不用可选类型就不哟啊用可选类型,给一个初值就好了,或者可以用NSNumber对象的可选类型
最新文章
- 05_整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()使用说明
- udp穿透简单讲解和实现(Java)
- 玩转linux文件(重点)
- EDIUS分别输出视频和音频的教程
- u-boot board_uart_init流程
- java中的包有那些 ???
- FPGA的LE数与门数的关系(转)
- DBS小结
- AOP TP框架有感
- (Review cs231n) Spatial Localization and Detection(classification and localization)
- include和require的区别
- 视频人脸检测——Dlib版(六)
- js格式化时间
- Educational Codeforces Round 26 B,C
- transclude
- 基于Java+SparkStreaming整合kafka编程
- 第15课-数据库开发及ado.net-数据库介绍,主键,外键,启动数据库,数据库身份验证方式,建表,分离数据库
- iOS开发-消息通知机制(NSNotification和NSNotificationCenter)
- MVC 扩展RadioButtonListFor和CheckBoxListFor
- Boost.Coroutine2:学习使用Coroutine(协程)