Swift2.0 NSUserDefaults

NSUserDefaults适合存储轻量级的本地客户端数据,比如记住密码功能,要保存一个系统的用户名、密码。使用 NSUserDefaults是首选。下次再登陆的时候就可以直接从 NSUserDefaults里面读取上次登陆的信息。

一般来说本地存储数据我们还可以是用 sqlite数据库,或者使用自己建立的 plist文件什么的,但这还得自己显示创建文件,读取文件,很麻烦,而是用 NSUserDefaults则不用管这些东西,就像读字符串一样,直接读取就可以了。

NSUserDefaults支持的数据格式也很多,有: IntFloatDoubleBOOL,甚至 AnyObject类型。

1,下面通过一个样例演示NSUserDefaults的用法
(1)如果是第一次运行程序通过 CFUUIDCreate方法生成一个唯一字符串作为用户id储存起来(形如:B8DDB58D-73BF-4E39-A051-365858FC4626)
(2)往后运行时直接从 NSUserDefaults中把用户id取出
1
2
3
4
5
6
7
8
9
10
11
12
class func get_uuid() -> String {
var userid = NSUserDefaults .standardUserDefaults().stringForKey( "hangge" )
if (userid != nil ){
return userid!
} else {
uuid_ref = CFUUIDCreate ( )
uuid_string_ref = CFUUIDCreateString ,uuid_ref)
uuid: = Nsstring (format: uuid_string_ref)
.standardUserDefaults().setobject(uuid,forKey: )
uuid
}
}

2,对原生数据类型的储存和读取
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
userDefault = NSUserDefaults .standardUserDefaults()
//AnyObject
userDefault.setobject( "hangge.com" "Object" )
objectValue: AnyObject ? = userDefault.objectForKey( )
//Int类型
userDefault.setInteger(12345,monospace!important; min-height:auto!important; color:blue!important; background:none!important">"Int" )
intValue = userDefault.integerForKey(
//Float类型
userDefault.setFloat(3.2,monospace!important; min-height:auto!important; color:blue!important; background:none!important">"Float" )
floatValue = userDefault.floatForKey( )
//Double类型
userDefault.setDouble(5.2240,monospace!important; min-height:auto!important; color:blue!important; background:none!important">"Double" )
doubleValue = userDefault.doubleForKey( )
//Bool类型
userDefault.setBool( true "Bool" )
boolValue = userDefault.boolForKey( )
//NSURL类型
userDefault.setURL( NSURL (string: "http://hangge.com" )!,monospace!important; min-height:auto!important; color:blue!important; background:none!important">"NSURL" )
urlValue = userDefault. URLForKey ( )
//Nsstring类型
"Nsstring" )
nsstringValue = userDefault.objectForKey( ) as ! Nsstring
//NSNumber类型
number: NSNumber = (int:22)
userDefault.setobject(number,monospace!important; min-height:auto!important; color:blue!important; background:none!important">"NSNumber" )
number = userDefault.objectForKey( NSNumber
//NSArray类型
array: NSArray NSArray (array: [ "123" ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas, "456" ])
userDefault.setobject(array,monospace!important; min-height:auto!important; color:blue!important; background:none!important">"NSArray" )
//NSDictionaryy类型
dictionary: NSDictionary NSDictionary (dictionary: [ "1" : ])
userDefault.setobject(dictionary,monospace!important; min-height:auto!important; color:blue!important; background:none!important">"NSDictionary" )
dictionary = userDefault.objectForKey( NSDictionary

3,系统对象的存储与读取
系统对象实现存储,需要通过 archivedDataWithRootObject方法转换成 NSData为载体,才可以存储。下面以 UIImage对象为例:
15
userDefault = //UIImage对象存储
//将对象转换成NSData流
image = UIImage (named: "apple.png" imageData: NSData NSKeyedArchiver .archivedDataWithRootObject(image!)
//存储NSData对象
userDefault.setobject(imageData,monospace!important; min-height:auto!important; color:blue!important; background:none!important">"imageData"
//UIImage对象读取
//获取NSData
objData: = userDefault.objectForKey( NSData
//还原对象
myImage = NSKeyedUnarchiver .unarchiveObjectWithData(objData) UIImage
println (myImage)

4,自定义对象的存储和读取
如果想要存储自己定义的类,首先需要对该类实现 NSCoding协议来进行归档和反归档(序列化和反序列化)。即该类内添加 func encodeWithCoder(_encoder:NSCoder)方法init(coder decoder:NSCoder)方法,将属性进行转换。
38
//自定义对象存储
model = UserInfo (name: "航歌" ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,phone: "3525" //实例对象转换成NSData
modelData: NSData NSKeyedArchiver .archivedDataWithRootObject(model)
userDefault.setobject(modelData,monospace!important; min-height:auto!important; color:blue!important; background:none!important">"myModel" //自定义对象读取
myModelData = userDefault.objectForKey( NSData
myModel = .unarchiveObjectWithData(myModelData) ! UserInfo
//----- 自定义对象类 -----
class : NSObject {
name: String
phone: String
//构造方法
init (name: = "" ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,phone: String ){
self .name = name
.phone = phone
super . ()
}
//从nsobject解析回来
(coder aDecoder: NSCoder !){
.name=aDecoder.decodeObjectForKey( "Name" String
.phone=aDecoder.decodeObjectForKey( "Phone" String
}
//编码成object
encodeWithCoder(aCoder: NSCoder !){
aCoder.encodeObject(name,monospace!important; min-height:auto!important; background:none!important">)
aCoder.encodeObject(phone,monospace!important; min-height:auto!important; background:none!important">)
}
}

5,删除存储对象
通过 removeObjectForKey()方法可以删除已保存的数据。当然如果这个存储对象不存在也不会报错。
1
.standardUserDefaults().removeObjectForKey( )

原文出自: www.hangge.com 转载请保留原文链接 http://www.hangge.com/blog/cache/detail_668.html

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...