gpt4 book ai didi

ios - 扩展 JSONDecoder 以允许基于端点以不同方式序列化模型

转载 作者:行者123 更新时间:2023-12-01 16:21:19 26 4
gpt4 key购买 nike

我有许多模型,取决于端点,或者以不同的方式序列化。我的第一次尝试是 init(from decoder: Decoder)充满嵌套try catch block 。我认为更好的解决方案是扩展 JSONDecoder这样当我初始化一个时,我可以指定我从哪个端点提取。然后在我的模型中 init(from decoder: Decoder)我可以有一个 switch

switch
case endpoint1:
x = decoder.decode(Int.self, .x)
case endpoint2:
j = decoder.decode(String.self, .j)

我遇到的问题是你在 init 中的类。是 Decoder不是 JSONDecoder .如果我扩展 Decoder,我想不出一个地方并允许自己指定一个端点,我实际上可以指定一个端点,因为 JSONDecoder.decode()实例化它自己的 Decoder在幕后。想法?

最佳答案

在之前使用 CocoaPod 进行 JSON 解码和编码之后,我假设我实际上需要一种方法来处理同一模型的不同序列化,但幸运的是 Codable几乎可以自己处理这个问题。任何不会出现在每个序列化中的成员,只需使用 ? 标记为可选如果解码器找不到它的 key ,它将跳过它而不是失败。同样,编码器只会对不是 nil 的成员进行编码。 .
例子:

class Book: Codable {
var title: String
var numPages: Int?
var author: String?
enum CodingKeys: String, CodingKey {
case title
case numPages = "number_of_pages"
case author
}
}

此模型将从 JSON 数据成功解码,该数据具有:
  • 标题
  • 标题和页数
  • 标题和作者
  • 标题、页数和作者

  • 但是,由于标题不是可选的,如果 JSON 数据不包含标题,它将失败。

    关于ios - 扩展 JSONDecoder 以允许基于端点以不同方式序列化模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59148026/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com