json - 在 swift 中使用 UUID() 和 json
问题描述
我在网上找到了在 json 文件中使用硬编码 uuid 的示例,并且对我来说效果很好,但是当我在我的应用程序中添加从 json 数组中删除项目的功能时,我需要动态创建这些 uuid
这是我的 json 文件(list.json),它曾经有像 "id": 1 这样的硬编码 id 并且可以工作(当我使用 int 作为 ids 时)
[
{
"name": "Dune",
"author": "Frank Herbert",
"page": "77"
},
{
"name": "Ready Player One",
"author": "Ernest Cline",
"page": "234"
},
{
"name": "Murder on the Orient Express",
"author": "Agatha Christie",
"page": "133"
}
]
这是我的结构(Book.swift)
struct Book: Hashable, Codable, Identifiable {
var id = UUID()
var name: String
var author: String
var page: String
}
当我使用这个结构和代码(Data.swift)解码我的json文件时......
let bookData: [Book] = load("list.json")
func load<T: Decodable>(_ filename: String) -> T {
let data: Data
guard let file = Bundle.main.url(forResource: filename, withExtension: nil)
else {
fatalError("Couldn't find \(filename) in main bundle.")
}
do {
data = try Data(contentsOf: file)
} catch {
fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
}
do {
let decoder = JSONDecoder()
return try decoder.decode(T.self, from: data)
} catch {
fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)")
}
}
我的最后一个致命错误被执行,因为 id 键没有与之关联的值(因为我在我的 json 文件中删除了它)
如何使用 id 初始化我的 json 文件,以便id = UUID()
我的结构中的语句可以为其分配一个唯一的 id?
解决方案
在这种情况下,您必须指定CodingKeys
并省略id
struct Book: Hashable, Codable, Identifiable {
let id = UUID()
let name: String
let author: String
let page: String
private enum CodingKeys : String, CodingKey { case name, author, page }
}
显然结构成员不会被修改,所以将它们声明为常量。
推荐阅读
- python - 烧瓶-Python。如何在 Flask 中使用外部模块并将数据传递给 html?
- php - SQL 堆叠导致 HTML 表的组在一行中
- r - 如何不必要地显示 Weka 接口列表
- javascript - javascript 和 Facebook 登录 API:获取用户的电子邮件
- java - 从 Java 调用 SQL 包过程
- python - 如何使用python读取目录的所有新文件?
- django - Travis ci 编码环境变量对于项目中的其他 github 用户失败
- php - 我在 php 中的爬虫有一些问题
- swift - UIPickerView 作为 UITextField 输入模式而不是键盘
- node.js - Node.js 错误:ENONET