json - 编写一个函数来解码通用 JSON。如何为 Codable.Protocol 提供参数?

标签 json swift codable

<分区>

我正在尝试编写我的第一个正式的 Xcode 项目,但我对 Swift 5 没有太多经验。因此我什至不确定我的想法是否足够有意义。

我手头的项目涉及大量 JSON 文件的获取和解码。响应有两种或三种模式。所以我想我会写一个 func并将响应模式传递给它。

我使用 decode<T>(_ type: T.Type, from data: Data): JSONDecoder 解码我的数据。此函数的第一个参数显然具有类型 T.Type .但它实际上应该是 Codable.Protocol 类型.

有什么办法可以用 Codable 得到它吗? ?

这是我的功能:

func requestPageContent(forCodable codable: Codable, completion: @escaping (Result<PageContent, Error>) -> Void) {
    DispatchQueue.global(qos: .default).async {
        if let jsonData = try? Data(contentsOf: self) {
            if let requestResults = try? JSONDecoder().decode(type(of: codable).self, from: jsonData) {
                DispatchQueue.main.async {
                    completion(.success(requestResults))
                }
            } else {
                print("error: json decoder")
            }
        } else {
            print("error: fetch data")
        }
    }
}

谢谢。

最佳答案

你的意思是 requestPageContent 是通用的,像这样:

func requestPageContent<Content: Codable>(forCodable codable: Content, 
                                          completion: @escaping (Result<Content, Error>) -> Void) {

    ...
    if let requestResults = try? JSONDecoder().decode(Content.self, from: jsonData) {
    ...

这表示您正在请求一些编译时已知的特定内容类型。

关于json - 编写一个函数来解码通用 JSON。如何为 Codable.Protocol 提供参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56065544/

相关文章:

ios - 无法为自定义栏按钮设置标题?

ios - 是否允许指向 Objective-C 数组的指针(通过桥接 header )?

json - Swift,当 key 未知/动态时,如何使用 Decodable 和 Codable 解析/解码 JSON

json - 如何使用 jq 将 JSON 对象流转换为数组

python - json 格式的嵌套对象结构

javascript - Jquery - 计算 JSON 对象

ios - Firebase-Swift : How to add every created user to a friends list when created?

ios - 从 json 中获取单个特定值

ios - 使用 Decodable 解码同一键中的不同对象数组

json - 在 SWIFT 4 中解析嵌套的 JSON