Swift中使用NSUserDefaults保存自定义对象
NSUserDefaults适合存储轻量级的本地客户端数据,比如保存一些系统的基本配置等东西,使用NSUserDefaults是首选,它非常的简单,不依赖其他的什么东西,屏蔽了Plist文件的读写等等.
但是NSUserDefaults支持的数据格式比较有限,只支持了Int
、Float
、Double
,String
,NSDate
,NSArray
,NSDictionary
,Bool
.不支持自定义对象的存取.
这个特性对于简单的数值来说还算比较容易.只需要简单的操作(一个Value 一个Key ),例如,想要保存一个NSString的对象,代码实现为:
|
|
但是涉及到复杂的对象的时候,就需要我们进行特殊的处理了.
其实这个特殊处理也很简单,既然NSUserDefaults
支持NSDate
类型的数据.那么我们在存取自定义对象的时候,就可以预先把我们的自定义对象转换成为NSData
类型的即可.
在Swift中如果要把一个自定义对象能转换成为NSData
.需要在自定义对象上实现NSObject
和NSCoding
协议,并且实现func encodeWithCoder(aCoder: NSCoder)
和init?(coder aDecoder: NSCoder)
方法,比如:
|
|
这样就可以使用NSKeyedUnarchiver
类来进行转换了.
那么保存一个自定义对象到NSUserDefaults
就变为了:
|
|
而读取一个自定义对象就成为了:
|
|
当然我们可以给NSUserDefaults
增加一个扩展,把编解码自定义对象进行一次封装:
|
|
PS:按照这个思路,其实把自定义对象转换成JSON字符串等都是可以的.