,,ios,swift,struct"/>

首页 > 解决方案 > 类型不匹配(Swift.Dictionary,

问题描述

我的 JSON:

'''
{
  "status": 200,
  "data": {
    "widgets": [
      {
        "type": "small_half_slider",
        "data": {
          "banners": [
            {
              "id": 42765,
              "image": "",
              "title": "!",
              "is_ad": false,
              "url": {
                "url": "",
                "page": "web_link",
                "params": {
                  "url": ""
                },
                "queries": []
              },
              "video": "",
              "description": "",
              "bullet_points": []
            }
'''

和我的结构:

'''
import Foundation

struct mainPage:Codable{
  var  status:Int?
  var  data: mData?
}

struct mData:Codable {
    var widgets:[Mwidg]
}

struct Mwidg:Codable{

    var type:String
    var data:wdata
}

struct wdata:Codable{
   var show_type:String?
   var banners:[bannerData]?
}

struct bannerData:Codable {
    var id:Int?
    var image:String?
    var title:String?
    var is_ad:Bool?
    var url:urlData?
    var video:String?
    var description:String?

}
struct urlData:Codable {
    var url:String?
    var page:String?
    var params:paramsData?
    var queries:[queriesData]?
}  

struct paramsData:Codable {
    var url:String?
}

struct queriesData:Codable {

 }


'''

然后我遇到了这个错误:

typeMismatch(Swift.Dictionary<Swift.String, Any>, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "data", intValue: nil), CodingKeys(stringValue: "widgets", intValue: nil), _JSONKey( stringValue: "Index 1", intValue: 1), CodingKeys(stringValue: "data", intValue: nil)], debugDescription: "期望解码 Dictionary<String, Any> 但找到了一个数组。",underlyingError: nil) )

标签: iosswiftstruct

解决方案


您正面临这个问题,因为在您的 json 响应中,您没有获取值或获取 struct mData 和 Mwidg 中存在的属性的 nil 值,为了使您的解决方案使 struct 属性成为可选的,这样即使您没有收到数据您的 json 响应代码将起作用。您粘贴的有问题的 json 未完成,您可能将某些对象设为 nil。


推荐阅读