Ren*_*iar 4 generics json struct swift
我正在尝试在 SWIFT 上创建通用结构以与 JSON 和 Codable 一起使用,但我不知道是否可行。
没有泛型,它就可以工作。
struct apiContainer: Decodable {
let meta: Meta
let result: [Client]
}
Run Code Online (Sandbox Code Playgroud)
我有一个名为“Client”的结构,我想要其他结构,例如:所有者、工厂等。
所有 JSON 响应都必须发送到 apiContainer。它有元和[客户端]。
我的目标是使 [Client] 成为 [T],这样我就可以将任何结构传递给 apiContainer。
波纹管是我在操场上尝试的一段代码。
问题: 有可能吗?我怎样才能做到(在结构和 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)
Run Code Online (Sandbox Code Playgroud)
struct apiContainer<T>: Decodable\nRun Code Online (Sandbox Code Playgroud)\n\n应该
\n\nstruct ApiContainer<T: Decodable>: Decodable\nRun Code Online (Sandbox Code Playgroud)\n\n和
\n\ntry JSONDecoder().decode(apiContainer.self, from: json)\nRun Code Online (Sandbox Code Playgroud)\n\n应该
\n\ntry JSONDecoder().decode(ApiContainer<Client>.self, from: json)\nRun Code Online (Sandbox Code Playgroud)\n\n瞧\xc3\xa0!有用。
\n| 归档时间: |
|
| 查看次数: |
1964 次 |
| 最近记录: |