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

2015-08-10  本文已影响67人  DevKyle

MVC

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

例子

在平时程序中,要用到大量的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
}
}

参考文献

上一篇下一篇

猜你喜欢

热点阅读