加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift之小项目实战

发布时间:2020-12-14 01:29:56 所属栏目:百科 来源:网络整理
导读:ViewController.swift import UIKitclass ViewController: UITableViewController { //声明模型数组 var persons: [Person]? override func viewDidLoad() { super.viewDidLoad() //获取网络数据 loadData { (dataList) - () in print(dataList) self.person

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
    }

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读