Swift2.0 NSUserDefaults

前端之家收集整理的这篇文章主要介绍了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" @H_957_301@"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 @H_957_301@"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 ( )
@H_455_403@
//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" "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: "航歌" "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: = "" 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
原文链接:https://www.f2er.com/swift/322981.html

猜你在找的Swift相关文章