【发布时间】:2022-01-07 13:13:58
【问题描述】:
我有这个本地 JSON 文件,其中包含标题、开始和结束。我想从开始键和结束键创建日期,但标题是字符串,所以我可以创建事件对象。现在我已经将所有内容解码为字符串。所以我试图创建一个自定义初始化,但一个错误不断出现“从初始化程序返回而不初始化所有存储的属性”。不知道我做错了什么
这是我的事件模型和我的 JSONFile
struct Event: Decodable & Equatable {
let title : String
let start : Date
let end : Date
//Custom decoding init
init(from decoder : Decoder) throws {
let container = try decoder.singleValueContainer()
let stringType = try container.decode(String.self)
switch stringType {
case "title":
self.title = try container.decode(String.self)
case "start":
self.start = try container.decode(Date.self)
case "end":
self.end = try container.decode(Date.self)
default:
throw DecodingError.dataCorruptedError(in: container, debugDescription: "Not valid date \(stringType)")
}
}
}
JSON
[{"title": "Evening Picnic", "start": "November 10, 2018 6:00 PM", "end": "November 10, 2018 7:00 PM"}, {"title": "Nap Break", "start": "November 8, 2018 12:30 PM", "end": "November 8, 2018 1:30 PM"}, {"title": "Football Game", "start": "November 3, 2018 6:00 PM", "end": "November 3, 2018 10:00 PM"}, {"title": "Evening Cookout with Friends", "start": "November 6, 2018 5:00 PM", "end": "November 6, 2018 10:00 PM"}, {"title": "Roller Derby", "start": "November 7, 2018 12:00 PM", "end": "November 7, 2018 2:30 PM"}, {"title": "Basketball Game", "start": "November 8, 2018 7:30 PM", "end": "November 8, 2018 10:30 PM"}, {"title": "Local Pub with Friends", "start": "November 1, 2018 7:30 PM", "end": "November 1, 2018 11:00 PM"}, {"title": "Dentist Appointment", "start": "November 10, 2018 1:45 PM", "end": "November 10, 2018 2:30 PM"}, {"title": "Free Donuts", "start": "November 9, 2018 3:00 PM", "end": "November 9, 2018 4:00 PM"}, {"title": "TV Show Marathon", "start": "November 9, 2018 4:30 PM", "end": "November 9, 2018 9:00 PM"}, {"title": "Lunch with Friends", "start": "November 8, 2018 11:30 AM", "end": "November 8, 2018 1:00 PM"}, {"title": "SF Coffee Festival","start": "November 6, 2018 6:00 PM","end": "November 6, 2018 9:00 PM"}, {"title": "Beer with Friends", "start": "November 9, 2018 8:00 PM", "end": "November 9, 2018 9:30 PM"}, {"title": "Yoga", "start": "November 1, 2018 6:00 PM", "end": "November 1, 2018 7:30 PM"}, {"title": "Rock Concert", "start": "November 7, 2018 6:30 PM", "end": "November 7, 2018 11:00 PM"}, {"title": "Lunch Meeting", "start": "November 9, 2018 12:30 PM", "end": "November 9, 2018 2:30 PM"}, {"title": "Bicycling with Friends", "start": "November 1, 2018 6:00 AM", "end": "November 1, 2018 9:30 AM"}, {"title": "Birthday Party", "start": "November 10, 2018 12:30 PM", "end": "November 10, 2018 8:30 PM"}, {"title": "Football Tailgate with John", "start": "November 3, 2018 6:00 PM", "end": "November 3, 2018 10:00 PM"}]
【问题讨论】:
-
参见JSONDecoder.dateDecodingStrategy,或编写自定义解码初始化。不需要第二个结构。无论如何,这种日期格式将很难解码。
-
我已经在你最后的question中展示了如何将它们解码为日期
-
我正在尝试创建自定义解码初始化,但似乎无法正确完成。
-
找一个例子。您的代码甚至与自定义解码 init 的样子都不相近。
-
我已经再次展示了如何解码您的日期。您其他问题中链接的重复帖子具有完全相同的日期格式。
标签: json swift jsondecoder