gpt4 book ai didi

json - SWIFT 结构上的泛型

转载 作者:搜寻专家 更新时间:2023-11-01 07:06:26 25 4
gpt4 key购买 nike

我正在尝试在 SWIFT 上制作通用结构以使用 JSON 和 Codable,但我不知道这是否可能。

没有泛型,它也能工作。

struct apiContainer: Decodable {
let meta: Meta
let result: [Client]
}

我有一个名为“Client”的结构,我想要其他结构,例如:owner、plant 等等。

所有 JSON 响应都必须转到 apiContainer。它有 Meta 和 [Client]。

我的目标是让 [Client] 成为 [T],这样我就可以将任何结构传递给 apiContainer。

Bellow 是我在 Playground 上尝试的一段代码。

问题:是否可以?我怎样才能做到(在 struct 和 json.decode 行上)

import PlaygroundSupport
import UIKit
import Foundation


struct Client: Decodable {
let name: String
let postal_code: String
let city: String
}

struct Meta: Decodable {
let sucess: String
let value: String
}

struct apiContainer<T>: Decodable {
let meta: Meta
let result: [T]
}

let json = """
{
"meta": {
"sucess": "yes",
"value": "123"
},
"result": [
{
"name": "Name 1",
"postal_code": "PC1",
"city": "City 1",
"address": "01 Street"
},
{
"name": "Name 2",
"postal_code": "PC2",
"city": "City 2",
"address": "02 Street"
}
]
}
""".data(using: .utf8)!

let converted = try JSONDecoder().decode(apiContainer.self, from: json)

print(converted.result)
print(converted.meta)

最佳答案

struct apiContainer<T>: Decodable

应该是

struct ApiContainer<T: Decodable>: Decodable

try JSONDecoder().decode(apiContainer.self, from: json)

应该是

try JSONDecoder().decode(ApiContainer<Client>.self, from: json)

瞧!它有效。

关于json - SWIFT 结构上的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47827116/

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