UserDefaults适合轻量级的本地客户端存储,存储一个值,新值可以覆盖旧值,可以重复存储,也可以存储一次,然后直接从UserDefaults里面读取上次存储的信息,很方便,用的时候,宏定义下,直接调用!

轻量级数据库的话,移动端一般使用SQlite数据库,也是一款轻量级的适合移动端设备的数据库,具体可以参考我以前写的关于SQlite的博客,当然了UserDefaults根本不用管这些东西,直接就想读取字符串一样,直接读取就可以了!

UserDefaults支持的数据格式也很多:有:Int,Float,Double,BOOL,Array,Dictionary,甚至 Any 类型

1. 样例展示:

func get_uuid() -> String {
let userID = UserDefaults.standard.string(forKey: "HHGGLL")
//判断UserDefaults中是否已经存在
if userID != nil {
return userID!
}else{
let uuid_ref = CFUUIDCreate(nil)
let uuid_string_ref = CFUUIDCreateString(nil, uuid_ref)
let uuid = uuid_string_ref! as String
UserDefaults.standard.set(uuid, forKey: "HHGGLL")
return uuid
}
}

输出:

 print("用户的UUID:\(get_uuid())")

如上图!

2.其他基本数据类型和any类型的存储

 //存储练习
let userDefault = UserDefaults.standard
//any
userDefault.set("hgl001", forKey: "object")
let objectValue:Any? = userDefault.object(forKey: "object")
print("\(objectValue as! String)")
//int
userDefault.set(, forKey: "int")
let intValue = userDefault.integer(forKey: "int")
print(intValue)
//float
userDefault.set(3.2, forKey: "float")
let floatValue = userDefault.float(forKey: "float")
print(floatValue)
//double
userDefault.set(5.2369, forKey: "double")
let doubleValue = userDefault.double(forKey: "double")
print(doubleValue)
//bool
userDefault.set(true, forKey: "bool")
let boolValue = userDefault.bool(forKey: "bool")
print(boolValue)
//url
userDefault.set(URL(string:"http://hangge.com")!, forKey: "URL")
let urlValue = userDefault.url(forKey: "URL")
print(urlValue)
//string类型
userDefault.set("hgl is a hero!", forKey: "string")
let stringValue = userDefault.string(forKey: "string")
print(stringValue)
//nsnumber类型
var number = NSNumber(value:)
userDefault.set(number, forKey: "number")
number = userDefault.object(forKey: "number") as! NSNumber
print(number)
//array类型
var array:Array = ["",""]
userDefault.set(array, forKey: "Array")
array = userDefault.array(forKey: "Array") as! [String]
print(array)
//Dictionary类型
var dictory = ["name":"hero11223"]
userDefault.set(dictory, forKey: "dictory")
dictory = userDefault.dictionary(forKey: "dictory") as! [String:String]
print(dictory)
//系统对象的存储与读取
let userDeafaults = UserDefaults.standard
//存储对象
let label = UILabel()
label.text = "天空飘来五个字"
let labelData = NSKeyedArchiver.archivedData(withRootObject: label)
//存储data对象
userDefault.set(labelData, forKey: "labelData") //对象读取
//获取data
let objData = userDefault.data(forKey: "labelData")
//还原对象
let mylabel = NSKeyedUnarchiver.unarchiveObject(with: objData!) as? UILabel
print(mylabel)
//UIImage对象存储
let image1 = UIImage(named:"1.jpeg")
let image2 = UIImage(cgImage: (image1?.cgImage!)!, scale: (image1?.scale)!,
orientation: (image1?.imageOrientation)!)
let imageData = NSKeyedArchiver.archivedData(withRootObject: image2)
//存储Data对象
userDefault.set(imageData, forKey: "imageData") //UIImage对象读取
//获取Data
let objDatas = userDefault.data(forKey: "imageData")
//还原对象
let myImg = NSKeyedUnarchiver.unarchiveObject(with: objDatas!)
print("输出是\(myImg)")

打印如下图:

3.删除存储对象

通过removeObject()方法可以删除已保存的数据

UserDefaults.standard.removeObject(forKey: "key值")

swift--使用UserDefaults来进行本地数据存储的更多相关文章

  1. Swift - 使用NSUserDefaults来进行本地数据存储

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

  2. Android本地数据存储复习

    Android本地数据存储复习 Android无论是应用层还是系统层都需要在本地保存一些数据,尤其在应用层中使用的就更为普遍,大体有这么几种:SharedPreference,file,sqlite数 ...

  3. iOS开发——数据持久化&使用NSUserDefaults来进行本地数据存储

    使用NSUserDefaults来进行本地数据存储   NSUserDefaults适合存储轻量级的本地客户端数据,比如记住密码功能,要保存一个系统的用户名.密码.使用NSUserDefaults是首 ...

  4. iOS APP之本地数据存储(译)

    最近工作中完成了项目的用户信息本地存储,查阅了一些本地存储加密方法等相关资料.期间发现了一个来自印度理工学院(IIT)的信息安全工程师的个人博客,写了大量有关iOS Application secur ...

  5. Windows 8 应用开发 - 本地数据存储

    原文:Windows 8 应用开发 - 本地数据存储      在应用中通常会遇到用户主动或被动存储信息的情况,当应用关闭后这些数据仍然会存储在本地设备上,用户下次重新激活应用时会自动加载这些数据.下 ...

  6. iOS开发技术分享(1)— iOS本地数据存储

    iOS开发技术分享(1)— iOS本地数据存储 前言: 我本是一名asp.net程序员,后来加入了iOS游戏开发队伍,到现在也有一年多的时间了.这一年来,每天都干到2.3点钟才睡觉,不为别的,只为了学 ...

  7. 浏览器本地数据存储解决方案以及cookie的坑

    本地数据存储解决方案以及cookie的坑 问题: cookie过长导致页面打开失败 背景: 在公司的项目中有一个需求是打开多个工单即在同一个页面中打开了多个tab(iframe),但是需要在刷新时只刷 ...

  8. Android之ListView,AsyncTask,GridView,CardView,本地数据存储,SQLite数据库

    版权声明:未经博主允许不得转载 补充 补充上一节,使用ListView是用来显示列表项的,使用ListView需要两个xml文件,一个是列表布局,一个是单个列表项的布局.如我们要在要显示系统所有app ...

  9. cocos2d-html5开发之本地数据存储

    做游戏时常常须要的一个功能呢就是数据的保存了,比方游戏最高分.得到的金币数.物品的数量等等.cocos2d-html5使用了html5.所以html5的数据保存方法是对引擎可用的: html5本地数据 ...

随机推荐

  1. eclipse中类和方法添加作者日期说明

    1.类添加作者日期说明 依次点击window—>preferences—>Java—>Code Stype—>Code Templates-Comments-Types 2.方 ...

  2. u-boot中添加自定义命令

    1.u-boot命令机制u-boot中,每个命令都使用一个struct cmd_tbl_s结构体定义,该定义在include/command.h中实现:struct cmd_tbl_s{ char * ...

  3. FreeRTOS 事件标志组

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 为什么要使用事件标志事件标志组是实现多任务同步的有效机制之一.也许有不理解的初学者会问采用事件标志组多麻烦, ...

  4. <a>设置长宽

    因为只有块元素才会有物理属性,在css世界里边,有三种形态的东西, 1. 块元素. 特性:有物理属性,width,height写值起作用,而且要占据一行.2. 内联元素. 特性:没有物理属性.但是ma ...

  5. MyEclipse9.0激活步骤

    MyEclipse 9.0的激活机制 1.破解公钥(确保MyEclipse没有开启,否则失败!)   解压破解包中的myeclipse9_keygen_activator.zip,复制publicKe ...

  6. 一款基于jQuery可放大预览的图片滑块插件

    今天给大家分享一款基于jQuery可放大预览的图片滑块插件.这款jQuery焦点图插件的特点是可以横向左右滑动图片,并且点击图片可以进行放大预览,唯一的缺陷是这款焦点图并不能循环切换,如果你有较好的J ...

  7. (转)kafka发布消息报错LEADER_NOT_AVAILABLE

    今天居然碰到这个错误,参考以下解决方案: $ bin/kafka-console-producer.sh --broker-list="192.168.1.100:32785" - ...

  8. C语言实现商品销售系统

    商品销售系统 #include<stdio.h> //头文件 #include<string.h> //头文件 #include<stdlib.h> //头文件 # ...

  9. 查询一个字符串的子串出现的次数在sql中

    select name,char_length(name)-char_length(replace(name,'aaaaaa','')) from teacher; 将原来的字符串字段取出长度  将子 ...

  10. iOS边练边学--UITableView性能优化之三种方式循环利用

    一.cell的循环利用方式1: /** * 什么时候调用:每当有一个cell进入视野范围内就会调用 */ - (UITableViewCell *)tableView:(UITableView *)t ...