在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在项目开发之中,你会经常需要将一些数据存储在本地,以便记录用户生产的数据或操作习惯。
Class: Person 接着输入父类的名称。 Subclass of: NSObject 语言默认选择。 Language: Swift 点击下一步按钮,进入下一步设置页面。 1 import UIKit 2 /*给类添加一个NSCoding协议,它通过扩展你的数据类,以支持编码和解码功能。 3 它的任务就是把数据写到数据缓存,最后持久保存到磁盘中。 4 */ 5 class Person:NSObject,NSCoding 6 { 7 //给类添加一个字符串类型的属性 8 var name: String 9 //添加一个初始化方法,用来设置属性的值 10 required init(name: String = "") 11 { 12 self.name = name 13 } 14 //添加一个协议中的初始化方法 15 //用来实现类的实例的解码操作 16 required init(coder decoder: NSCoder) 17 { 18 self.name = decoder.decodeObject(forKey: "Name") as? String ?? "" 19 } 20 //实现协议中的方法,用来实现类的实例的编码操作。 21 func encode(with coder: NSCoder) 22 { 23 coder.encode(name, forKey: "Name") 24 } 25 } 然后在左侧的项目导航区,打开视图控制器(ViewController.swift)的代码文件。 let userDefault = UserDefaults.standard 通过set方法,存储一个指定键的整形值 userDefault.set(35, forKey: "MyAge") 通过synchronize(同步)方法,把数据持久化到数据库 userDefault.synchronize() 当需要获取存储的数据时,通过指定的键获得存储的数据。 userDefault.integer(forKey: "MyAge") 通过设置方法,存储一个指定键的浮点类型的值。 1 userDefault.set(78.5, forKey: "Percentage") 2 //把数据持久化到数据库 3 userDefault.synchronize() 4 //通过指定的键获得存储的浮点类型数据 5 userDefault.float(forKey: "Percentage") 使用相同的方式存储其他的数据 1 userDefault.set(3.141592658, forKey: "PI") 2 //把数据持久化到数据库 3 userDefault.synchronize() 4 //通过指定的键获得存储的双精度类型的浮点数据 5 userDefault.double(forKey: "PI") 同样可以存储布尔类型的数据 1 userDefault.set(true, forKey: "IsPassed") 2 //把数据持久化到数据库 3 userDefault.synchronize() 4 //通过指定的键获得存储的布尔类型的数据 5 userDefault.bool(forKey: "IsPassed") 往指定的键中存储一个网址类型的数据 1 userDefault.set(URL(string:"https://www.cnblogs.com/strengthen/")!, forKey: "URL") 2 //把数据持久化到数据库 3 userDefault.synchronize() 4 //通过指定的键获得存储的双精度类型的浮点数据 5 userDefault.url(forKey: "URL")! 存储、持久化和读取字符串类型的数据 1 userDefault.set("strengthen", forKey: "MyName") 2 userDefault.synchronize() 3 userDefault.string(forKey: "MyName") 即使是数组也可以使用这种方式进行存储和读取的。 1 userDefault.set(["Xcode","Swift"], forKey: "Language") 2 userDefault.synchronize() 3 userDefault.array(forKey:"Language") as! [String] 存储和读取指定键的字典对象 1 userDefault.set(["Name":"strengthen"], forKey: "User") 2 userDefault.synchronize() 3 userDefault.dictionary(forKey:"User") as! [String : String] 使用删除对象方法,删除指定键下的内容 1 userDefault.removeObject(forKey: "User") 2 userDefault.synchronize() 此时再获取该键对应的值时,将返回空 userDefault.dictionary(forKey:"User") ?? "" 接着演示如何归档一个对象的实例,首先初始化一个类的实例对象, 1 Let person = Person() 2 person.name = "smith" 然后通过归档数据方法,将符合NSCoding协议的对象进行归档 let personData = NSKeyedArchiver.archivedData(withRootObject: person) 调用synchronize(同步)方法,持久化存储内容 userDefault.synchronize() 将归档对象存储再指定的键中 userDefault.set(personData, forKey: "Teacher") 通过data方法,获得指定键的二进制内容。 let data = userDefault.data(forKey: "Teacher") 然后对该二进制数据进行解码,并转换位指定的类型 let teacher = NSKeyedUnarchiver.unarchiveObject(with: data!) as! Person
输出对象名称的属性的值 print(teacher.name) 技巧:如果有后台服务器,打包IPA前记得把服务器地址,从测试环境改为生产环境。 |
请发表评论