今天在处理一个公共搜索头部控件的时候,头部控件需要流式展示一堆名字,但是名字的来源于不同的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"]
}
}
网友评论