gpt4 book ai didi

ios - 可解码值 String 或 Bool

转载 作者:行者123 更新时间:2023-11-28 11:44:04 26 4
gpt4 key购买 nike

我目前正在使用一个设计糟糕的 JSON Api...这总是返回一个值(例如 String、Int、Double...)或 false(非空)。

使用 decodable 处理此问题的最佳方法是什么,因为 Codable 不支持 Any?

key 可以是这样的:

{
"key": "Test",
}

或者像这样(我知道,应该是 null 而不是 false):

{
"key": false,
}

这是不可能的:

struct Object: Decodable {
let key: Any?
}

最佳答案

您可以创建一个通用包装器类型,如果键的值为 false,则将 nil 分配给 Optional 值,否则解码值(value)。然后,您可以将它们包装在这个包装器中,而不是存储实际类型。

struct ValueOrFalse<T:Decodable>: Decodable {
let value:T?

public init(from decoder:Decoder) throws {
let container = try decoder.singleValueContainer()
let falseValue = try? container.decode(Bool.self)
if falseValue == nil {
value = try container.decode(T.self)
} else {
value = nil
}
}
}

struct RandomJSONStruct: Decodable {
let anInt:ValueOrFalse<Int>
let aString:ValueOrFalse<String>
}

let noValueJson = """
{
"anInt": false,
"aString": "Test"
}
"""

do {
print(try JSONDecoder().decode(RandomJSONStruct.self, from: noValueJson.data(using: .utf8)!))
} catch {
print(error)
}

关于ios - 可解码值 String 或 Bool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52836448/

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