SWIFT Struct 上的泛型

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)

use*_*434 9

struct apiContainer<T>: Decodable\n
Run Code Online (Sandbox Code Playgroud)\n\n

应该

\n\n
struct ApiContainer<T: Decodable>: Decodable\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n
try JSONDecoder().decode(apiContainer.self, from: json)\n
Run Code Online (Sandbox Code Playgroud)\n\n

应该

\n\n
try JSONDecoder().decode(ApiContainer<Client>.self, from: json)\n
Run Code Online (Sandbox Code Playgroud)\n\n

瞧\xc3\xa0!有用。

\n