Swift语言精要 - 序列化和反序列化
在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"
Swift语言精要 - 序列化和反序列化的更多相关文章
- Swift语言精要 - 浅谈结构体(Struct)
CGRect, CGSize, CGPoint这些是 . String, Int, Array, Dictionary这些我们经常用的也是结构体(Struct). 那么结构体(Struct)到底是什么 ...
- Swift语言精要 - Operator(运算符重载)
运算符重载 Swift的这一语言特性或许应该启发于C++ class Vector2D { var x : Float = 0.0 var y : Float = 0.0 init (x : Floa ...
- Swift语言精要 - 扩展(Extension)
swift的Extension用户在不访问代码的情况下扩展基本结构类型或自定义类 extension Int { var doubled : Int { } func multiplyWith(ano ...
- Swift语言精要-闭包(Closure)
闭包(Closure)这个概念如果没学过Swift的人应该也不会陌生. 学过Javascript的朋友应该知道,在Javascript中我们经常会讨论闭包,很多前端工程师的面试题也会问到什么是闭包. ...
- Swift语言精要 - 浅谈代理模式(Delegate)
在iOS编程中,我们经常谈到代理代理,也就是delegate,那么什么是代理呢? 我们来看一下cocoa对它的描述: Delegation is Cocoa’s term for passing of ...
- Swift语言精要 - Dictionary(字典)
字典以键值对的形式存储数据. 键不能重复,但是值可以重复. 基本语法用例: var states : Dictionary<String, String> = ["CA" ...
- Swift语言精要 - 属性
1. Stored Property eg: var number: Int = 0 2. Computed Property eg: var area : Double { get { return ...
- go 语言的序列化与反序列化
与c 语言一样, 在网络编程中, go语言同样需要进行序列化与反序列化 在c语言中, 通常需要一块内存缓冲区用来收 发数据.缓冲区一般定义成char *buff类型. 当需要发送 数据时, 直接使用m ...
- 浅谈C#中的序列化与反序列化
今天我利用这篇文章给大家讲解一下C#中的序列化与反序列化.这两个概念我们再开发中经常用到,但是我们绝大部分只用到了其中的一部分,剩下的部分很多开发人员并不清楚,甚至可以说是不知道.因此我希望通过这篇文 ...
随机推荐
- 微软为何选择在 Github 上开源 .NET 核心?
本文来自微软开源.NET 的一篇公告 ,文中阐述了微软为何选择在 Github 开源.NET,以及微软对开源和开源社区方面的认识的变迁. 对于.NET来说,今天(2014/11/12)是个大日子! 我 ...
- win10系统更新不了,总出现错误0xc8000442
来自 win10系统更新不了,总出现错误0xc8000442,SHIZHI333的回答. 首先卸载制有第三方防护软件管管家类软件,再试试下面的方法:清理一下更新临时文件,具体操作如下: 1.右键点击开 ...
- FTP服务器原理(转)
本文转自https://www.cnblogs.com/Aiapple/p/5955736.html 感谢作者 21.1 FTP服务器原理 使用明码传输方式,且有相当多的安全危机历史.因此一般 ...
- Java Deadlock Example and How to analyze deadlock situation
source:http://www.journaldev.com/1058/java-deadlock-example-and-how-to-analyze-deadlock-situation De ...
- Vmware ESXi添加共享磁盘
1,ssh登录(两个虚拟机所在的宿主机)物理主机,创建共享磁盘(该步骤也可图形化操作) #cd /vmfs/volumes/4ffd9951-2c12a99a-ff2a-3440b59cd4f ...
- python测试开发django-16.JsonResponse返回中文编码问题
前言 django查询到的结果,用JsonResponse返回在页面上显示类似于\u4e2d\u6587 ,注意这个不叫乱码,这个是unicode编码,python3默认返回的编码 遇到问题 接着前面 ...
- Java集合类: Set、List、Map、Queue使用场景
目录 1. Java集合类基本概念 2. Java集合类架构层次关系 3. Java集合类的应用场景代码 1. Java集合类基本概念 在编程中,常常需要集中存放多个数据.从传统意义上讲,数组是我们的 ...
- 超人前传第一至十季/全集Smallville迅雷下载
超人前传 第一至十季 Smallville Season 1-10 (2001-2010)本季看点:CW台的长寿剧<超人前传>在以帅哥靓女征服观众了这么多年后,也终于进入尾声,该剧将于今年 ...
- Gerrit代码审查工具
1 Gerrit简介 Gerrit,一种免费.开放源代码的代码审查软件,使用网页界面.利用网页浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改. 1 ...
- Android -- Camera2(Android5.0)
Camera2 Camera2是Android5.0中的其中一个新的特性,新的API.与原来的camera API相比,不同之处在于: 原生支持RAW照片输出 突发拍摄模式 制约拍照速度的不再是软件而 ...