今天在写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代表的是一个对象,现在总结了一下两者的区别,如下:
- Object:forkey:中object值是不能够为nil的,不然会报错.
- Value:forKey:中value能够为nil,但是当value为nil的时候,会自动调用removeObject:forKey方法.