繁体   English   中英

如何符合Swift 4中的序列协议

[英]How To Conform to the Sequence Protocol in Swift 4

当前试图快速将json字典解析到屏幕上,但是我遇到了这个序列协议错误,还有一个类型不匹配错误,它获取字符串/数据并需要一个Int。 错误为“类型'ProductResponse'与协议'序列'不符”,并且

“,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。 您在这里有两个对象。 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM