gpt4 book ai didi

json - 在 Swift 中解码 Codable

转载 作者:行者123 更新时间:2023-11-28 11:41:21 24 4
gpt4 key购买 nike

无法让它工作:我试图将 JSON 解码抽象为一个函数,将 Codable 加上一些数据作为参数。

因此,如果可能的话,我需要具有以下函数签名:

func doTheJSONDecoding(cdbl: Codable, data: Data) {...}

这是我的代码,从数据模型开始。下面有两个例子....

import UIKit
import Foundation

struct MyStructCodable : Codable {
let items : [MyValue]?
}

struct MyValue : Codable {
let value : String?
}

let dta: Data = """
{
"items": [
{
"value": "Hello1"
}
]
}
""".data(using: .utf8)!

然后是两个例子:

// Example 1: this code works fine !!!!!!!!!!!!!!!!!!!!!!!!

let decoder = JSONDecoder()
do {
let result = try decoder.decode(MyStructCodable.self, from: dta)
print(result.items?[0].value ?? "")
} catch {
print(error)
}

// above code prints: Hello1


// Example 2: this code does not work - WHY ???????????????

func doTheJSONDecoding(cdbl: Codable, data: Data) {
let decoder = JSONDecoder()
do {
let result = try decoder.decode(cdbl, from: data)
print(result.items?[0].value ?? "")
} catch {
print(error)
}
}

let myValue = MyValue(value: "Hello2")
let myStructyCodable = MyStructCodable(items: [myValue])
doTheJSONEncoding(cdbl: myStructyCodable, data: dta)

抛出的错误在函数内部,它说:

enter image description here

有什么方法可以让我保留函数签名(即 func doTheJSONDecoding(cdbl: Codable, data: Data) 并且仍然让它工作??感谢任何帮助。

最佳答案

这是我尝试让你的函数工作的尝试,它可能会有所改进,但它确实返回了一个正确解码的对象。请注意,它采用对象类型而不是对象类型,并且正是实现 Decodable 的类型 T。

func doTheJSONEncoding<T: Decodable>(cdbl: T.Type, data: Data) -> T? {
let decoder = JSONDecoder()
do {
let result = try decoder.decode(cdbl.self, from: data)
return result
} catch {
print(error)
}
return nil
}

//testing it
let myValue = MyValue(value: "Hello2")
let myStructyCodable = MyStructCodable(items: [myValue])
let decoded = doTheJSONEncoding(cdbl: MyStructCodable.self, data: dta)
print(decoded?.items?[0].value ?? "")

关于json - 在 Swift 中解码 Codable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53581359/

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