gpt4 book ai didi

swift - 如何在 Swift 4 中遵循序列协议(protocol)

转载 作者:行者123 更新时间:2023-11-28 07:30:32 25 4
gpt4 key购买 nike

目前正在尝试快速将 json 字典解析到屏幕上,但是我遇到了这个序列协议(protocol)错误,还有一个类型不匹配错误,它获取一个字符串/数据并期望一个 Int。错误是“类型‘ProductResponse’不符合协议(protocol)‘Sequence’”和

"typeMismatch(Swift.Int, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "code", intValue: nil)], debugDescription: "Expected to decode Int but found a string/data instead.", underlyingError: nil))"

 struct ProductResponse: Codable {
let code: String
let product: Product
let statusVerbose: String
let status: Int

enum CodingKeys: String, CodingKey {
case code, product
case statusVerbose = "status_verbose"
case status
}
}

struct Product: Codable {
let code: String
let productName: String

enum CodingKeys: String, CodingKey {
case code
case productName = "product_name"
}

}


class ViewController: UIViewController {
//var products = [Product]()
let API_URL = "https://carsdata/api/v0/product/5000112630794.json"
override func viewDidLoad() {
super.viewDidLoad()
Alamofire.request(API_URL).responseJSON {
response in
let json = response.data
do
{
let decoder = JSONDecoder()
let productData = try decoder.decode(ProductResponse.self, from: json!)
for product in productData{ print(product.productName!) } }
catch
let err{ print(err) }
}
}
}

最佳答案

问题是您没有在 JSON 出现时对其进行解析。你这里有两个对象。 ProductResponseProduct 并且您正在尝试将其作为一个解析。 productNameProduct 的一部分,但您试图从 ProductResponse 获取它。为清楚起见,我建议您创建 2 个实体并尝试这样做:

struct ProductResponse: Codable {
let code: String
let product: Product
let statusVerbose: String
let status: Int

enum CodingKeys: String, CodingKey {
case code, product
case statusVerbose = "status_verbose"
case status
}
}

struct Product: Codable {
let code: String
let productName: String

enum CodingKeys: String, CodingKey {
case code
case productName = "product_name"
}
}

并尝试解码 ProductResponse.self

关于swift - 如何在 Swift 4 中遵循序列协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54856939/

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