zoukankan      html  css  js  c++  java
  • [Swift实际操作]七、常见概念-(10)使用UserDefaults和归档方式存取用户数据实际操作

    在项目开发之中,你会经常需要将一些数据存储在本地,以便记录用户生产的数据或操作习惯。
    在项目文件夹上带点击鼠标右键。弹出右键菜单。
    本文将为你演示,存储用户数据的两种常用方式。


    选择菜单中的创建新文件选项(New File),创建一个类文件,用来存档用户数据。
    在弹出的文件模板选择窗口中,保持默认的选项(Cocoa Touch Class),然后点击下一步按钮,进入下一步设置页面。
    在类名输入框内输入类的名称。

    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)的代码文件。
    现在开始编写代码,实现数据的存储和归档。
    UserDefaults类用于保存应用程序的设置和属性以及用户数据,
    存储在defaults中的数据,在整个应用程序的生命周期中都是可以随时调用的。

    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前记得把服务器地址,从测试环境改为生产环境。

  • 相关阅读:
    Webpack配置开发环境总结
    vue2.0 引入font-awesome
    vue-cli 脚手架项目简介(一)
    CSS3伪类与伪元素的区别及注意事项
    页面滚动到可视区域执行操作
    56. 合并区间
    <leetcode c++>卖股票系列
    面试题 16.01. 交换数字
    542. 01 矩阵
    <leetcode c++> 445. 两数相加 II
  • 原文地址:https://www.cnblogs.com/strengthen/p/9771989.html
Copyright © 2011-2022 走看看