gpt4 book ai didi

Swift 4 Codable 从数组中获取第一个数组

转载 作者:行者123 更新时间:2023-11-30 10:51:51 25 4
gpt4 key购买 nike

我的 JSON 如下所示:

{
success: true,
message: null,
messages: null,
data: [
[ ... ]
]
}

现在我想知道,我可以用以下方法解决这个问题:

struct Something: Codable {
let data: [[Data]]
}

something.data.flatMap { $0 }

但我宁愿这样做:

struct Something: Codable {
let data: [Data]
}

我已经知道我可以使用 CodingKeys 枚举集和 container.nestedContainer(...) 通过 JSON 实现导航,但是当没有键时如何实现这一点,但只是数组中的数组?我可以通过 Decodable 上的自定义 init 来实现此目的吗?如果可以,如何实现?

最佳答案

一个可能的解决方案是编写一个自定义初始值设定项来展平数组

struct Root : Decodable {
let success : Bool
let data : [Foo]

private enum CodingKeys : String, CodingKey { case success, data }

init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
success = try container.decode(Bool.self, forKey: .success)
let arrayData = try container.decode([[Foo]].self, forKey: .data)
guard !arrayData.isEmpty else { throw DecodingError.dataCorruptedError(forKey: .data, in: container, debugDescription: "Object is empty") }
data = arrayData.first!
}

}

struct Foo : Decodable { ... }

Data 类型存在于 Foundation 框架中。强烈建议您不要将其用作自定义类型。

关于Swift 4 Codable 从数组中获取第一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54378831/

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