iOS 本地数据存储OC和Swift分析

    今天在写Swift的时候,碰到了本地存储的问题,OC的NSUserDefauls和Swift的UserDefaust还是有差别的,我的邮箱是KenenCS@163.com,欢迎多多交流!

一.本地数据存储的用法

首先我们先来回忆一下OC中NSUserDefauls的用法:

1
2
3
4
5
6
7
8
9
10
11
//存值
[[NSUserDefaults standardUserDefaults] setObject:<#(nullable id)#> forKey:<#(nonnull NSString *)#>];
[[NSUserDefaults standardUserDefaults] setValue:<#(nullable id)#> forKey:<#(nonnull NSString *)#>];
[[NSUserDefaults standardUserDefaults] setBool:<#(BOOL)#> forKey:<#(nonnull NSString *)#>];
[[NSUserDefaults standardUserDefaults] setInteger:<#(NSInteger)#> forKey:<#(nonnull NSString *)#>];
[[NSUserDefaults standardUserDefaults] setURL:<#(nullable NSURL *)#> forKey:<#(nonnull NSString *)#>];
[[NSUserDefaults standardUserDefaults] setFloat:<#(float)#> forKey:<#(nonnull NSString *)#>];
[[NSUserDefaults standardUserDefaults] setDouble:<#(double)#> forKey:<#(nonnull NSString *)#>];
//取值
[[NSUserDefaults standardUserDefaults] objectForKey:<#(nonnull NSString *)#>];
[[NSUserDefaults standardUserDefaults] valueForKey:<#(nonnull NSString *)#>];

在看一下Swift中的用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
//存值
UserDefaults.standard.set(<#T##url: URL?##URL?#>, forKey: <#T##String#>)
UserDefaults.standard.set(<#T##value: Any?##Any?#>, forKey: <#T##String#>)
UserDefaults.standard.set(<#T##value: Bool##Bool#>, forKey: <#T##String#>)
UserDefaults.standard.set(<#T##value: Double##Double#>, forKey: <#T##String#>)
UserDefaults.standard.set(<#T##value: Float##Float#>, forKey: <#T##String#>)
UserDefaults.standard.set(<#T##value: Int##Int#>, forKey: <#T##String#>)
//取值
UserDefaults.standard.object(forKey: <#T##String#>)
UserDefaults.standard.bool(forKey: <#T##String#>)
UserDefaults.standard.double(forKey: <#T##String#>)
UserDefaults.standard.float(forKey: <#T##String#>)
UserDefaults.standard.integer(forKey: <#T##String#>)

通过两者对比,我们发现:

1.Swift存储的value值要明确数据类型了,所以使用者可千万要注意,不然会报错!
2.Swift最新版中没有SetObject: forKey: 的方法!
3.记住.object(forkey:)这个方法,使用时请确保这个值是一定不为空!

二.value和object的区别

我们都知道 value 代表的是值, object代表的是一个对象,现在总结了一下两者的区别,如下:

  1. Object:forkey:中object值是不能够为nil的,不然会报错.
  2. Value:forKey:中value能够为nil,但是当value为nil的时候,会自动调用removeObject:forKey方法.
文章目录
  1. 1. 一.本地数据存储的用法
  2. 2. 二.value和object的区别
|