iOS开发笔记之代码设计思路_视图模型

简介: 利用范型对同一类的数据模型统一转换为同一种视图模型

定义协议

//让数据模型遵守这个协议
protocol ZYFText {
    var title: String?{get}
}

定义视图模型

class ZYFTextViewModel: NSObject {

    var title: String?

    private var font: UIFont

    private var minWidth: CGFloat

    private var edgeInsets: UIEdgeInsets

    private var stringWidth: CGFloat {
        guard let text = title else {
            return minWidth
        }
        return text.sizeWithFont(font).width
    }

    var viewWidth: CGFloat {
        let width = self.stringWidth + self.edgeInsets.left + self.edgeInsets.right
        return max(width, minWidth)
    }
    //利用范性,通过遵守ZYFText协议的数据模型,获取视图尺寸方面的数据
    init<T: ZYFText>(item: T, font: UIFont, minWidth: CGFloat, edgeInsets: UIEdgeInsets) {
        super.init()
        self.title = item.title
        self.font = font
        self.minWidth = minWidth
        self.edgeInsets = edgeInsets
        }
    }

viewController中的应用

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let minWidth: CGFloat = 60
        let font = UIFont.systemFont(ofSize: 15)
        let edgeInsets = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)
        let item = datasource[indexPath.row]
        let textModel = ZYFTextViewModel(item: item, font: font, minWidth: minWidth, edgeInsets: edgeInsets)
        return CGSize(width: textModel.viewWidth, height: 40)
    }
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 翻译自“Collection View Programming Guide for iOS” 0 关于iOS集合视...
    lakerszhy阅读 4,184评论 1赞 22
  • 苹果原来的开发文档已更新,此翻译已过时。。。 来源自苹果开发文档ViewController Programmin...
    MarkLin阅读 1,862评论 4赞 8
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,753评论 30赞 472
  • 在vmvare虚拟机中要成功安装ghost系统,没有像是用原版安装包安装时那么简单,需要先进行一系列的操作,那么该...
    65_刘璐阅读 668评论 0赞 2
  • 2017年11月17日,天气冷,星期五 一周很快就结束了,明天一诺休息,因为明天一诺想去参加弟弟幼儿园做蛋糕的活动...
    卢伟一诺阅读 467评论 0赞 0

友情链接更多精彩内容