Day23:传入 JSON 文件

前言

上一篇文章我 hard code 了一些数据进去我的专案,
现在要来把这些数据放进 JSON 文件里,
并将这些接入 app。

实作

  • 创建一个 Data 文件夹并在里面创建一个空的 JSON 文本
  • 补充 JSON 文件

    这里的内容会比昨天 hard code 的内容丰富一些
  • Parse JSON
  1. 在 model 里,根据 JSON 文件的内容创建 properties

    id 不一定存在,所以 变数 id 会是可选的,
    这个 Recipe class 也要符合 Decodable 协议
  2. 新建一个 Service file,将在这里传入数据

    这样做便於维护专案
  3. 传入 JSON 文件
    创建一个导向 json 文件的 url 地址,
    并检查是否为 nil:
let pathString = Bundle.main.path(forResource: "recipes", ofType: "json")
guard pathString != nil else {
    return [Recipe]()
    }

创建 url 对象:

 let url = URL(fileURLWithPath: pathString!)

创建数据对象:

do {
    let data = try Data(contentsOf: url)
}
catch {
    print(error)
}

解码:

let decoder = JSONDecoder()
do {
    let recipeData = try decoder.decode([Recipe].self, from: data)
}
catch {
    print(error)
} 

设置 id:

for r in recipeData {
    r.id = UUID()
}
return recipeData


会看到 Xcode 显示一个 error,
因为我们可能创建数据失败,
所以需要回传一个空的 Recipe array:

4. 回到 ViewModel 在 init 创建实例获取数据:
因为我们会反复调用 class DataServise 里的 function,
所以用 static 修饰这个 function,
使其变成一种静态方法,不需创建实例就能直接调用。


<<:  【Day 23】Go 基础小笔记 IV:goroutine、channel

>>:  [Day 23] SQL left / right join

Log Agent - Fluent Bit 简介

前几篇讲这麽多, 来介绍一个服务Fleunt Bit Fleunt Bit 它是一个开源的数据收集器...

Day16 AR装置的编年史(中) 带着AR 走出户外去探险!

上回说到歌伦比亚大学制作的类似AR眼镜的装置,今天!还是歌伦比亚大学 1996-1997年 他们在1...

[从0到1] C#小乳牛 练成基础程序逻辑 Day 27 - File I/O 逐字识别码@ 时间日期 乱数

读写档案 | 跳脱字元\ | 逐字识别码@ | DateTime | Random ...

[Day 22] 资料产品在需求访谈阶段的五个大坑

最後几天来回顾一下在过去开发资料产品时常见的坑与应对方式,不管是专案还是产品,首先当然要面对的难题就...

Data layer testing (1)

在切回去写 domain layer 之前,我们先把之前写好的 data layer class 补...