【问题标题】:how to map the data which has array of data如何映射具有数据数组的数据
【发布时间】:2019-01-10 10:16:22
【问题描述】:

我的回答是:

  [
  {
    "menu_code" : "NDS",
    "items" : [
      {
        "unit" : "Nos",
        "name" : "Chapathi\/Pulkas",
        "quantity" : 2
      },
      {
        "unit" : "Cup",
        "name" : "Palya\/Curry",
        "quantity" : 1
      }
    ],
    "is_active" : 1,
    "image" : "nds.jpg",
    "menu_name" : "Normal Diet South"
  },
  {
    "menu_code" : "NCCD",
    "items" : [
      {
        "menu_code" : "NDS",
        "name" : "Monday"
      },
      {
        "menu_code" : "NDN",
        "name" : "Tuesday"
      }
    ],
    "is_active" : 1,
    "image" : "NCCD.jpg",
    "menu_name" : "Normal Combo Corporate Diet"
  }
]

今天我有两种格式。在这两种格式中,只有我的数据来自响应。我需要在集合视图中显示它们。

我的 api 调用:

func getAllCatogory(){

        TransportManager.sharedInstance.AllCatogory { (dt, err) in

            if let _ = err{

            }else{
                if let data = dt as? String {
                   let pro = Mapper<AllCatagories>().map(JSONString: data)
                print(data) // getting data
                print(pro as Any) // getting nil

                }

            }
        }
    }

我的模特:

class AllCatagories: Mappable{

    var menu_code = ""
    var items: Array<AllCatProducts> = []
    var is_active = 0
    var image = ""
    var menu_name = ""

    required init?(map: Map) {

    }

    init() {

    }

    func mapping(map: Map) {

        menu_name <- map["menu_name"]
        is_active <- map["is_active"]
        menu_code <- map["menu_code"]
        image <- map["image"]
       items <- map["items"]
    }
}

下面我为我的 json 中的项目创建了一个模型类。

class AllCatProducts: Mappable{

    var name = ""
    var quantity = 0
    var unit = ""
    var menu_code = ""



    required init?(map: Map) {

    }

    init() {

    }

    func mapping(map: Map) {
        name <- map["name"]
        quantity <- map["quantity"]
        unit <- map["unit"]
        menu_code <- map["menu_code"]
    }
}

问题是我的pro 中的值为零。不确定我什么时候做错了。

谢谢

【问题讨论】:

    标签: ios iphone swift alamofire xcode10.1


    【解决方案1】:

    你可以试试

    struct AllCatagories: Codable {
        let menuCode: String
        let items: [AllCatProducts]
        let isActive: Int
        let image, menuName: String
    }
    
    struct AllCatProducts: Codable {
        let unit: String?
        let name: String
        let quantity: Int?
        let menuCode: String? 
    }
    

    do {
       let decoder = JSONDecoder()
       decoder.keyDecodingStrategy = .convertFromSnakeCase
       guard let str = dt as? String else { return }
       let res  = try decoder.decode([AllCatagories].self, from:str.data(using: .utf8)!)
       print(res)
     }
     catch {
      print(error)
     }
    

    【讨论】:

    • 评论不用于扩展讨论;这个对话是moved to chat
    • @Sh_Khan 我试过像 thsi ` for data in res { if let name = data.menuName { print(name) } }` 甚至没有进入内部名称。我在我的getallcat 方法中写了这个
    • @Sh_Khan 在这里有任何帮助stackoverflow.com/questions/54434614/…
    猜你喜欢
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 2020-11-03
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多