iOS開發(fā)筆記之代碼設計思路_視圖模型

簡介: 利用范型對同一類的數(shù)據模型統(tǒng)一轉換為同一種視圖模型

定義協(xié)議

//讓數(shù)據模型遵守這個協(xié)議
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協(xié)議的數(shù)據模型疏旨,獲取視圖尺寸方面的數(shù)據
    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)
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市霞玄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惰爬,老刑警劉巖撕瞧,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狞尔,死亡現(xiàn)場離奇詭異,居然都是意外死亡页畦,警方通過查閱死者的電腦和手機豫缨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來燃箭,“玉大人舍败,你說我怎么就攤上這事∪瓜罚” “怎么了弛说?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵木人,是天一觀的道長醒第。 經常有香客問我进鸠,道長,這世上最難降的妖魔是什么霞幅? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任司恳,我火速辦了婚禮绍傲,結果婚禮上,老公的妹妹穿的比我還像新娘猎塞。我一直安慰自己杠纵,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布铝量。 她就那樣靜靜地躺著,像睡著了一般唐瀑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哄辣,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天力穗,我揣著相機與錄音气嫁,去河邊找鬼。 笑死崖面,一個胖子當著我的面吹牛巫员,可吹牛的內容都是我干的。 我是一名探鬼主播简识,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼七扰,長吁一口氣:“原來是場噩夢啊……” “哼颈走!你這毒婦竟也來了?” 一聲冷哼從身側響起疫鹊,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤拆吆,失蹤者是張志新(化名)和其女友劉穎枣耀,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捞奕,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡伟葫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年筏养,在試婚紗的時候發(fā)現(xiàn)自己被綠了常拓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡茎辐,死狀恐怖掂恕,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情慕蔚,我是刑警寧澤斋配,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布艰争,位于F島的核電站甩卓,受9級特大地震影響,放射性物質發(fā)生泄漏逾柿。R本人自食惡果不足惜宅此,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弱匪。 院中可真熱鬧萧诫,春花似錦斥难、人聲如沸哑诊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至茴扁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間毁习,已是汗流浹背纺且。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工载碌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嫁艇。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓步咪,卻偏偏與公主長得像猾漫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子悯周,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容

  • 翻譯自“Collection View Programming Guide for iOS” 0 關于iOS集合視...
    lakerszhy閱讀 3,860評論 1 22
  • 蘋果原來的開發(fā)文檔已更新,此翻譯已過時捐康。。贮匕。 來源自蘋果開發(fā)文檔ViewController Programmin...
    MarkLin閱讀 1,738評論 4 8
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,139評論 30 470
  • 在vmvare虛擬機中要成功安裝ghost系統(tǒng),沒有像是用原版安裝包安裝時那么簡單劳翰,需要先進行一系列的操作,那么該...
    65_劉璐閱讀 601評論 0 2
  • 2017年11月17日乙墙,天氣冷生均,星期五 一周很快就結束了听想,明天一諾休息汉买,因為明天一諾想去參加弟弟幼兒園做蛋糕的活動...
    盧偉一諾閱讀 363評論 0 0