实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(2)

简介: 实战教程·元宇宙来了,准备好你的电子名片了吗?(八)

写入本地数据

确定文件夹后,我们创建一个方法将数据写入到本次存储中,如下代码所示:

swift

复制代码

//写入本地数据
func saveItems() {
    let encoder = PropertyListEncoder()
    do {
        let data = try encoder.encode(models)
        try data.write(to: dataFilePath(), options: Data.WritingOptions.atomic)
    } catch {
        print("错误信息: (error.localizedDescription)")
    }
}

image.png

上述代码中,我们使用编码器PropertyListEncoder将对象实例与XML数据格式之间进行互相转换,作用是使得原始数据能够在系统中进行传输,传输的数据通过dataFilePath方法进行写入存储中,我们将整个写入存储的操作创建一个方法saveItems。

我们什么时候会使用到将数据写入存储呢?是的,在每次数据发生变化时。因此我们可以在ViewModel视图模型创建的方法中调用saveItems方法,如下图所示:

image.png

写入本次存储保存后,我们如果使用到网络请求的方法时,还需要将网络请求回来的数据也写入到本次存储中,以及在页面加载时读取本次存储的内容。

加载本地数据

所以我们还需要创建一个读取本地存储数据的方法,将上一次存起来的数据在下一次打开时加载出来,如下代码所示:


// 加载本地数据
func loadItems() {
    let path = dataFilePath()
    // 如果没有数据则跳过
    if let data = try? Data(contentsOf: path) {
        let decoder = PropertyListDecoder()
        do {
            models = try decoder.decode([Model].self, from: data)
        } catch {
            print("错误提示: (error.localizedDescription)")
        }
    }
}

image.png

上述代码中,我们创建了一个读取本地数据的方法loadItems,在loadItems方法中,我们首先判断数据路径是否存在,如果存在则执行使用编码器PropertyListEncoder传输数据,将符合Model数据模型的数据加载到models数据集中,如果失败则输出打印错误信息。

初始化本地数据

完成后,我们需要在应用初始化时,读取本次数据的方法,如下代码所示:


init() {
    loadItems()
}

image.png

完成后,我们来到ContentView视图,创建一条数据并刷新模拟器预览,无论我们离开此页面还是推出Xcode,数据都会被保存在本地中,在下一次打开时就会看得到上一次创建的数据。

image.png


相关文章
|
安全 搜索推荐 JavaScript
和Cookie相关的Header 字段有哪些?
和Cookie相关的Header 字段有哪些?
190 0
|
8月前
|
存储 算法 C++
【C++数据结构——查找】二分查找(头歌实践教学平台习题)【合集】
二分查找的基本思想是:每次比较中间元素与目标元素的大小,如果中间元素等于目标元素,则查找成功;顺序表是线性表的一种存储方式,它用一组地址连续的存储单元依次存储线性表中的数据元素,使得逻辑上相邻的元素在物理存储位置上也相邻。第1次比较:查找范围R[0...10],比较元素R[5]:25。第1次比较:查找范围R[0...10],比较元素R[5]:25。第2次比较:查找范围R[0..4],比较元素R[2]:10。第3次比较:查找范围R[3...4],比较元素R[3]:15。,其中是顺序表中元素的个数。
280 68
【C++数据结构——查找】二分查找(头歌实践教学平台习题)【合集】
|
4月前
|
数据中心
网络拓扑类型分类
本内容介绍了六种常见的网络拓扑结构:总线型、星型、环型、树型、网状型和混合型。每种结构均包含定义、优点、缺点及应用场景的详细说明。例如,总线型成本低但可靠性差;星型易于管理但中心节点负担重;网状型可靠性高但成本昂贵;混合型则结合多种结构以优化性能,但设计复杂。这些拓扑适用于不同规模和需求的网络环境,如家庭网络、企业网络及数据中心等。
473 13
|
9月前
|
SQL 弹性计算 安全
阿里云上云优选与飞天加速计划活动区别及购买云服务器后续必做功课参考
对于很多用户来说,购买云服务器通常都是通过阿里云当下的各种活动来购买,这就有必要了解这些活动的区别,同时由于活动内的云服务器购买之后还需要单独购买并挂载数据盘,还需要设置远程密码以及安全组等操作之后才能正常使用云服务器。本文就为大家介绍一下目前比较热门的上云优选与飞天加速计划两个活动的区别,以及通过活动来购买云服务器之后的一些必做功课,确保云服务器可以正常使用,以供参考。
208 10
|
Java 关系型数据库 API
Spring Cloud微服务面试题
Spring Cloud微服务面试题
442 0
|
9月前
|
定位技术 数据安全/隐私保护
如何评估HTTP代理IP的性能?
随着互联网技术的发展,使用代理IP的人越来越多。选择HTTP代理IP时,需注意速度和稳定性、用户信息保护、地域性、带宽上限、支持的协议、客户支持、用户评价和信誉、价格和性价比等方面。希望这些建议能帮助大家做出合适的选择。
116 1
|
运维 容灾 关系型数据库
MySQL高可用方案--Xenon全解
MySQL高可用方案--Xenon全解
|
机器学习/深度学习 数据采集 物联网
【机器学习】Google开源大模型Gemma2:原理、微调训练及推理部署实战
【机器学习】Google开源大模型Gemma2:原理、微调训练及推理部署实战
466 0
|
JavaScript NoSQL 前端开发
|
JSON Java 数据格式
java校验json的格式是否符合要求
java校验json的格式是否符合要求 在日常开发过程中,会有这样的需求,校验某个json是否是我们想要的数据格式,json-schema-validator使用
983 0