ViewController.swift
import UIKit class ViewController: UITableViewController { //声明模型数组 var persons: [Person]? override func viewDidLoad() { super.viewDidLoad() //获取网络数据 loadData { (dataList) -> () in print(dataList) self.persons = dataList //刷新表格 self.tableView.reloadData() } } //MARK: 模拟网络数据请求 func loadData(finished: (dataList: [Person]) -> () ) { dispatch_async(dispatch_get_global_queue(0,0)) { () -> Void in //开始网络请求耗时操作 //创建容器数组 初始化数组 var array = [Person]() //字典转模型 for i in 0..<50 { let name = "范冰冰\(i)" let age = random() % 20 + 10 let p = Person(dict: ["name" : name,"age" : age]) //添加对象 array.append(p) } //请求结束 在主线程回调 dispatch_async(dispatch_get_main_queue(),{ () -> Void in //执行闭包 //回调模型数组 finished(dataList: array) }) } } } //MARK: tableViewDelegate & Datasource extension ViewController { override func tableView(tableView: UITableView,numberOfRowsInSection section: Int) -> Int { return persons?.count ?? 0 } override func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { //类型转换 会涉及到 ? ! 具体的转换类型 可以根据Xcode智能提示 //是根据接受的类型 到时可选还是必选 来确定 用 ? 还是 ! let cell = tableView.dequeueReusableCellWithIdentifier("DemoCell",forIndexPath: indexPath) as! PersonCell //懒加载是无处不在的 cell.person = persons![indexPath.row] return cell } }
Person.swift
import UIKit class Person: NSObject { var name: String? var age: Int = 0 //构造函数 - KVC init(dict: [String : AnyObject]) { super.init() setValuesForKeysWithDictionary(dict) } //需要生写 description //只读属性 override var description: String { let keys = ["name","age"] let dict = dictionaryWithValuesForKeys(keys) return dict.description } }
PersonCell.swift
import UIKit class PersonCell: UITableViewCell { @IBOutlet weak var nameLabel: UILabel! @IBOutlet weak var ageLabel: UILabel! var person: Person? { didSet { nameLabel.text = person?.name //转译的过程中 字符串拼接 如果是可选类型 自动添加 optional ageLabel.text = "\(person?.age ?? 0)" } } override func awakeFromNib() { super.awakeFromNib() // Initialization code } override func setSelected(selected: Bool,animated: Bool) { super.setSelected(selected,animated: animated) // Configure the view for the selected state } }