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

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

作者: 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
    }
    }
    

    参考文献

    相关文章

      网友评论

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

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