美文网首页
整洁,小巧的代码--- 代码复用

整洁,小巧的代码--- 代码复用

作者: DevKyle | 来源:发表于2015-08-10 01:28 被阅读67次

MVC

在MVC设计模式中,我们应该把代码放置在合适、正确的位置。

  • 关于视图的代码,比如label,button等控件的定义,声明放在View层下面
  • 关于模型的代码,比如需要显示在视图上的数据(datasorce),label的title;网络数据的抓取工作(数据和处理数据的方法)声明在Model层
  • 关于控制器的代码,比如使Model层上的数据在View层显示,Model层方法的调用,不同MVC之间的通信。声明调用在Controller层上。Controller层主要声明一些Model类型的变量,这些变量的作用是为了在视图上显示的数据源。

例子

在平时程序中,要用到大量的tableView,经常会用到大量的UITableDataSourceDelegate方法,我们通过将这部分关于datasource的类放在Mode层l中去,减少在controller中的代码。用一个简单的例子 来说明一下。这个例子就是两个tableview的跳转

Model层

将tableviewdatasource表示出来,这里没有处理数据的方法,只需要表示显示在View上的数据。
第一个tableview

     //firstcelldata
    import UIKit
    class FirstCellData {
    var title:String?
    init(){}  
    }

第二个tableviewdata

    import Foundation
    /// secondCellData
    class SecondCellData {
    var title:String?
    var subtitle:String?
     }

View层

View层主要关注的是在视图上所需要的控件,例子里主要是Label

对于第一个tableview

import UIKit
class FirstCell: UITableViewCell {
func configureForCell(item: FirstCellData!) {
    self.textLabel!.text = item.title
}
 }

第二个tableview

import UIKit
class SecondCell: UITableViewCell {
func configureForCell(item: SecondCellData!) {
    self.textLabel!.text = item.title;
    self.detailTextLabel!.text = item.subtitle;
   }
}      

Controller

对于tableview datasource的处理主要有numberOfRowsInSection和cellForRowAtIndexPath这两个方法,这里将它提取出来写。全局变量有存储数据的数组,reuseIndentifier用于指定storyboard中cellIndentifier,一个closure用于处理数据和View的绑定,下面是几句关键代码


    func tableView(tableView: UITableView,  numberOfRowsInSection section: Int) -> Int {
        return cellData!.count
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier!)
        configureCell!(cell!,cellData![indexPath.row])
        return cell!
    }

在tableview中使用这个datasource
import UIKit
class SecondTableViewController: UITableViewController {
var items:Array<SecondCellData> = []
var customDataSource:CustomDataSource?
let cellIdentifier = "secondCell"
override func viewDidLoad() {
    super.viewDidLoad()
    initData()
    setupTableView()
    
}
func initData(){
    for i in 1...50{
        let secondData = SecondCellData()
        secondData.title = "the title  is \(i)"
        secondData.subtitle = " the subtitle is \(i)"
        items.append(secondData)
    }
}
func setupTableView() {
    customDataSource = CustomDataSource(cellData: items, cellIdentifier: cellIdentifier, configureCell: {(cell, firstCellData) in
        let firstCell = cell as! SecondCell
        firstCell.configureForCell(firstCellData as! SecondCellData)
    })
    self.tableView.dataSource = customDataSource
}
}

参考文献

相关文章

  • 整洁,小巧的代码--- 代码复用

    MVC 在MVC设计模式中,我们应该把代码放置在合适、正确的位置。 关于视图的代码,比如label,button等...

  • [代码整洁之道]-整洁代码

    前段时间,看了代码整洁之道,顺手做了些笔记,分享给大家,和大家一起探讨整洁代码之道。 1.1要有代码 代码是我们最...

  • [微信小程序]自定义组件

    好记性不如烂笔头 组件开发,让代码看起来更加整洁,代码复用性更高,能够减少维护成本,可以让我们少写很多代码。所以,...

  • go 编程的架构模式(pipe-filter)

    架构模式,可以使你的代码可复用性高,代码整洁,如果不用架构模式写出来的代码就是字符的堆砌,没有美感。掌握了gola...

  • maven module 和 微服务

    代码复用分为:代码模块(module)复用和项目(微服务)复用。 module 划分规范合理,能够使代码复用,是从...

  • 程序架构设计方案之1--解耦合

    程序代码解耦合好处多多:1:程序的可复用2:可测试3:整洁4:减少文件关联 下面以我的代码为实例(代码一般,请喷)...

  • 代码整洁

    1.整洁的代码 “破窗理论”:窗户破损了的建筑让人觉着似乎没人照管,于是别人也不再关心。他们放任窗户继续破损,最终...

  • 整洁代码

    一、代码的命名 1.变量名、方法名:小驼峰法(除第一个单词之外,其他单词首字母大写) 2.类名:大驼峰法 (所有单...

  • 代码复用

    1.原型式继承 须知:每一个函数都有prototype属性对象的构造函数可以从其他对象继承方法,它创建出一个原型对...

  • 代码复用

    地基 仓库 插座

网友评论

      本文标题:整洁,小巧的代码--- 代码复用

      本文链接:https://www.haomeiwen.com/subject/yskiqttx.html