IOS(swift)-数据持久化-Preference

来源:互联网 发布:北大青鸟学java编程 编辑:程序博客网 时间:2024/06/04 18:26

Preference 使用讲解

Preference简单介绍

Preference是IOS实现数据持久化的一种方式。

  • 存储位置:Library/Preference
  • 存储格式:key-value
  • 存储类型:后面详细介绍
  • 用途:保存应用的偏好设置(类似Android的SharedPreference)
  • 注意:iTunes同步设备时会备份该目录。

使用介绍

官方为我们提供了UserDefaults类,可以很方便的存取数据。

  1. 获取UserDefaults实例

    var userDefault = UserDefaults.standard;
  2. 存数据

    userDefault.set(value, forKey: "key");/* 立即同步,保存数据 如果不调用synchronize()方法的花,系统会根据I/O情况不定时刻的保存到文件,所以如果想要立即保存数据的话,需要调用synchronize() */userDefault.synchronize();
  3. 读数据

      let value1 = userDefault.string(forKey: "key1")!;  let value2 = userDefault.integer(forKey: "key2");

支持存储的数据类型

1. 系统定义的数据类型

  • 支持:String、 Number、Date、 Array、Dictionary、Bool、Integer、Float等系统定义的数据类型
  • 存取方式:直接使用UserDefaults的set(value: xxx, forKey: String)方法进行存储。

2. 自定义类型

自定义的数据类型需要 转换成Data,再使用UserDefaults的set(Any?, forKey: String) 方法进行存储。

那么怎样将自定义的类和Data类型相互转换呢?

  1. 自定义类实现NSCoding协议

    NSCoding协议有两个方法:
    init?(coder aDecoder: NSCoder)
    encode(with aCoder: NSCoder)

    //解码required init?(coder aDecoder: NSCoder) {    self.name = aDecoder.decodeObject(forKey: "name") as! String;    self.age = aDecoder.decodeInteger(forKey: "age");}//编码:key-value形式func encode(with aCoder: NSCoder) {    aCoder.encode(name, forKey: "name");    aCoder.encode(age, forKey: "age");}
  2. 实现了NSCoding协议后,该类便可转换成Data类型

    • 自定义类 Data:NSKeyedArchiver.archivedData(withRootObject: youClass);
    • Data 自定义类:NSKeyedUnarchiver.unarchiveObject(with: data) as! youClass;
  3. 将自定义类转换成Data类型后,便可使用UserDefaults的set(Any?,forKey: String)方法进行存储了。

    userDefault.set(data, forKey: "history");
  4. 同样,使用UserDefaults的data(forKey: String)来获取数据。

    let data = userDefault.data(forKey: "history");
原创粉丝点击