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

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");
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值