Swift之小项目实战

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
    }

}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...