HandyJson 一个属性对应多个键

今天在处理一个公共搜索头部控件的时候,头部控件需要流式展示一堆名字,但是名字的来源于不同的model,所以需要把不同来源的model,转化成显示所需要的model,其中name字段,在不同的来源modle对应的字段不一样,展示的model是name字段,来源A是playName,来源B是nickName字段,以前没遇到过这种情况,或者说遇到这种情况都是OC了,加了一堆判断,也就处理了,我OC很少处理成模型使用,可能是我菜吧。然后我找了半天,都没找到资料,在寻找的过程中,看到有个路人甲在一个handyjson的文章下问这个问题,结果回复打不开,但是我看到了YYModel(我OC一般是用MJExtension)的写法,可以对应一个数组,所以尝试了一下数组写法,发现可以用,真是小惊喜呢。于是记录一下。一下是相关代码片段:

使用的地方

   func update(_ list:[SKScriptListItem]){
      dataArray = list
      type = .script
      listArray.removeAll()
      let list2 = [SKHeadNameItem].deserialize(from: list.toJSON() as [Any])! as! [SKHeadNameItem]
      listArray.append(contentsOf: list2)
      collectionView.reloadData()
   }
   func updateDM(_ list:[SKHoomDMItem]){
      dataArray = list
      type = .script
      listArray.removeAll()
      let list2 = [SKHeadNameItem].deserialize(from: list.toJSON() as [Any])! as! [SKHeadNameItem]
      listArray.append(contentsOf: list2)
      collectionView.reloadData()
   }

模型解析

struct SKHeadNameItem:HandyJSON {
   var id = 0
   var name = ""
   private var width = 0.0

   mutating func itemWidth() -> CGFloat{
      if width != 0 {
         return CGFloat(width)
      }
      let label = UILabel.label("", .font(type: .regular, size: 15), MainColor);
      label.text = name
      var size = label.sizeThatFits(.init(width: 0, height: 23))
      if size.width < 100 {
         size.width = 100
      }
      if size.width > (kScreenWidth - 160) {
         size.width = kScreenWidth - 160
      }
      width = Double(size.width)
      return CGFloat(width)
   }
   mutating func mapping(mapper: HelpingMapper) {
      mapper <<<
         self.name <-- ["nickName","playName"]
   }
}

你可能感兴趣的:(HandyJson 一个属性对应多个键)