swift 之归档和解归档
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对象的可选类型
swift 之归档和解归档的更多相关文章
- iOS:文件归档和解归档的详解和使用
文件归档和解归档: 用途: 所谓文件归档,就是把需要存储的对象数据存储到沙盒的Documents目录下的文件中,即存储到了磁盘上,实现数据的持久性存储和备份.解归档,就是从磁盘上读取该文件下的数据,用 ...
- 【IPHONE开发-OBJECTC入门学习】对象的归档和解归档
转自:http://blog.csdn.net/java886o/article/details/9046967 #import <Foundation/Foundation.h> #im ...
- iOS 数据存储 - 归档和解归档
这里的归档主要是用于自定义类的归档和解档.我们这里使用NSKeyedArchiver和NSKeyedUnarchiver来归档和解档. 注意:自己定义的类需要实现<NSCoding>,如: ...
- 利用Runtime对Ivar实例变量进行共用的归档和解档方式
一.介绍 在OC中每一个对象持有的变量都是实例变量,实例变量包括成员变量和属性变量,在runtime中用Ivar表示对象的实例变量.其实,runtime源码中可以看到,Ivar也是一个结构体(基本上在 ...
- (转载)OC学习篇之---归档和解挡
前几篇文章说到了OC中的Foundation框架,今天我们来看一下OC中的一个重要知识点:归档 OC中的归档就是将对象写入到一个文件中,Java中的ObjectInputStream和ObjectOu ...
- 【IOS学习基础】归档和解档
一.归档介绍 1.归档是指用某种格式来保存一个或多个对象,以便以后还原这些对象的过程.归档是将数据持久化的一种方式(所谓数据持久化,就是指在IOS开发过程中,将数据保存到本地,能够让程序的运行更加流畅 ...
- iOS基础知识之归档和解档
归档和解档:即将数据写入文件和从文件中读取数据. 此处以plist文件为例说明, 一.plist文件使用时的注意事项: 1.plist文件中仅支持写入Array,Dictionary,Boolean, ...
- OC 归档和解档
#import <Foundation/Foundation.h> #define PATH @"/Users/mac/Desktop/file.txt" int ma ...
- OC学习篇之---归档和解挡
今天我们来看一下OC中的一个重要知识点:归档 OC中的归档就是将对象写入到一个文件中,Java中的ObjectInputStream和ObjectOutputStream来进行操作的.当然在操作的这些 ...
随机推荐
- JavaScript 函数创建思想
//定义一个函数的步骤//1.开辟一个新的空间地址//2.把函数体里面的代码当做字符串存储到空间里面(一个函数如果只定义了,没有执行的话,这个函数没有任何意义)//3.在把我们的地址给我们的函数名fu ...
- 02_HTML5+CSS详解第一天
视频来源:麦子学院 讲师:朱朝兵 HTML5概念:HTML即超文本标记语言(HyperText Makeup Language),是一种语法简单,结构清晰的解释型文档,不同于其他编程语言. HTML5 ...
- TP手册学习第三天
命令行先在cmd进入项目目录,再执行命令 生成index模块的Blog控制器类库文件:php think make:controller index/Blog 如果仅仅生成空的控制器则可以使用:php ...
- php之插入排序
<?phpfunction insertSort($arr) { //插入排序 $len = count($arr); for($i=1;$i<$len;$i++){ ...
- JS学习--DOM
1.概念 文档对象模型DOM,定义访问和处理HTML文档的标准方法.DOM将HTML呈现为带有元素.属性和文本的树结构(节点树). 2.document.getElementById("id ...
- 通过traceroute追踪并打印成图片
#!/usr/bin/evn python #-*-coding:utf-8 -*- import time import logging,warnings import subprocess imp ...
- bzoj 4562 [Haoi2016]食物链
4562: [Haoi2016]食物链 Time Limit: 10 Sec Memory Limit: 128 MB Description 如图所示为某生态系统的食物网示意图,据图回答第1小题 ...
- [svn] TortoiseSVN 图文操作
TortoiseSVN 图文操作 [参考]https://jingyan.baidu.com/article/6c67b1d6f524d52787bb1ef3.html
- 小白入门Docker基础篇
docker是什么 百科上的解释是这样的: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化 ...
- poj 1423 打表/斯特林公式
对于n位数的计算,我们可以采用(int)log10(n) + 1的方法得到n的位数 第一种方法: 对于n!位数的计算,log10(n!) = log10(1) + log10(2) + ... + l ...