优化tableView加载cell与model的过程

优化tableView加载cell与model的过程

效果图

说明

1. 用多态的特性来优化tableView加载cell与model的过程

2. swift写起来果然要比Objective-C简洁了不少

源码

https://github.com/YouXianMing/Swift-TableViewDemo

https://github.com/YouXianMing/OC-TableViewDemo

//
//  ViewController.swift
//  Swift-TableViewDemo
//
//  Created by YouXianMing on 15/9/28.
//  Copyright © 2015年 YouXianMing. All rights reserved.
//

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    let typeOneCellFlag : String! = "typeOneCellFlag"
    let typeTwoCellFlag : String! = "typeTwoCellFlag"
    
    var datasArray : NSMutableArray!
    var tableView  : UITableView!
    
    override func viewDidLoad() {
        
        super.viewDidLoad()
        
        self.initDatasArray()
        
        self.initTableView()
    }

    // 数据源相关
    func initDatasArray() {
    
        datasArray = NSMutableArray()
        datasArray.addObject(TypeOneModel(flag: typeOneCellFlag, cellHeight: 100, data: "TypeOneModel"))
        datasArray.addObject(TypeTwoModel(flag: typeTwoCellFlag, cellHeight: 200, data: "TypeTwoModel"))
    }
    
    // tableView相关
    func initTableView() {
    
        tableView = UITableView(frame: view.bounds, style: .Plain)
        tableView.delegate       = self
        tableView.dataSource     = self
        tableView.separatorStyle = .None
        view.addSubview(tableView)
        
        tableView.registerClass(TypeOneCell.classForCoder(), forCellReuseIdentifier: typeOneCellFlag)
        tableView.registerClass(TypeTwoCell.classForCoder(), forCellReuseIdentifier: typeTwoCellFlag)
    }
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
        return datasArray.count
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
        let model : BaseModel! = datasArray[indexPath.row] as! BaseModel
        
        let cell : BaseTableViewCell! = tableView.dequeueReusableCellWithIdentifier(model.cellFlag!) as! BaseTableViewCell
        cell.tableView                = tableView
        cell.indexPath                = indexPath
        cell.data                     = model.data
        cell.loadData()
        
        return cell
    }
    
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        
        let model : BaseModel! = datasArray[indexPath.row] as! BaseModel
        
        return model.cellHeight!
    }
}

细节

原文地址:https://www.cnblogs.com/YouXianMing/p/4845087.html