gpt4 book ai didi

ios - 如何使用具有自定义初始值设定项的枚举类型值的解码结构中的值?

转载 作者:行者123 更新时间:2023-12-05 03:33:09 25 4
gpt4 key购买 nike

我有一个 API 响应返回一个类型不一致的 JSON 字段。因此,我去了https://www.quicktype.io寻求帮助并找到了一个模型。

这是我遇到问题的模型部分:

struct MyModel: Codable {
let id: ID?
}

enum ID: Codable {
case integer(Int)
case string(String)

init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
if let x = try? container.decode(Int.self) {
self = .integer(x)
return
}
if let x = try? container.decode(String.self) {
self = .string(x)
return
}
throw DecodingError.typeMismatch(ID.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for ID"))
}

func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
switch self {
case .integer(let x):
try container.encode(x)
case .string(let x):
try container.encode(x)
}
}
}

我有一个完全解码的响应,当我尝试打印该值时,我得到如下信息:

Optional(MyApp.ID.integer(27681250))

Optional(MyApp.ID.string(27681250))

我是这样做的:

print(modelData?.id)

我想访问我得到的确切值,但我无法这样做。我试过将它转换为其他类型,但没有帮助。任何帮助表示赞赏。谢谢。

最佳答案

您可以通过多种不同的方式来做到这一点。所有这些都在 The Swift Programming Language 中进行了解释书在Enumerations部分。

这只是其中一种方式...

func example(id: ID) {
switch id {
case let .integer(value):
<#code#>
case let .string(value):
<#code#>
}
}

关于ios - 如何使用具有自定义初始值设定项的枚举类型值的解码结构中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70363541/

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