swift - 如何遵守 Swift 4 中的序列协议
问题描述
目前正在尝试将 json 字典快速解析到屏幕上,但是我遇到了这个序列协议错误,还有一个类型不匹配错误,它获取一个字符串/数据并期望一个 Int. 错误是“类型'ProductResponse'不符合协议'Sequence'”和
"typeMismatch(Swift.Int, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "code", intValue: nil)], debugDescription: "预期解码 Int 但找到了一个字符串/数据。",底层错误: 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。你在这里有两个对象。ProductResponse
并且Product
您正试图将其解析为一个。productName
是其中的一部分,Product
但您正试图从中获取它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
。
推荐阅读
- python - AutoMl 边缘模型仅显示图像
- python - 取决于:python-httplib2,但不会安装
- sql-server - SSIS 执行 SQL 任务未正确执行简单的 T-SQL
- entity-framework - 无法隐式转换类型'System.Collections.Generic.List
' 到 'DistributionEmail.Data.EmailInfo' - python - 试图抓取 forecast.weather.gov 并遇到问题,特别是从 WriteText 标签获取数据
- python - 使用系列的近似 pi
- java - Spring RestTemplate JSON 响应被截断
- ios - 如何对 Realm 中的对象进行异步排序
- node.js - 无法扩展接口“http.IncomingMessage”。您指的是 “implements” 吗?
- python - 我在运行 train.py 时遇到问题,我很困惑