iOS-Swift-Plist-KVC

前言

最近被swift深深的迷住了,但是不知道写点什么好,就从基础的开始写吧.
本篇博客主要内容是 从Plist中加载数据,自定义cell,KVC等

上代码

创建一个DataList.plist内容如下

iOS-Swift-Plist-KVC_第1张图片
DataList.plist

再创建一个Model类Model.swift

import UIKit
class Model: NSObject {
    // 如果数据中有值但是这里没有的话走这个方法把值弃掉
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        return ;
    }
    // 姓名
    var name:String = ""
    // 年龄
    var age:String = ""
    // 详情
    var content:String = ""
}

在StoryBoard中创建tableView并关联属性和代理数据源等

iOS-Swift-Plist-KVC_第2张图片
关联代理和数据源

然后创建MyCell.swift 并创建Xib:

iOS-Swift-Plist-KVC_第3张图片
MyCell.xib
import UIKit

class MyCell: UITableViewCell {
    // 姓名
    @IBOutlet weak var nameLabel: UILabel!
    // 年龄
    @IBOutlet weak var ageLabel: UILabel!
    // 详情
    @IBOutlet weak var detailLabel: UILabel!
    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
    }
}

然后在ViewController.swift中写入以下代码

import UIKit

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!
    var modelArr:NSMutableArray = []
    override func viewDidLoad() {
        // 封装方法
        layoutView()
    }
    func layoutView(){
        // 注册cell
        tableView.registerNib(UINib.init(nibName: "MyCell", bundle: nil), forCellReuseIdentifier: "myCell")
        // 取出Plist url
        let fileUrl = NSBundle.mainBundle().URLForResource("DataList", withExtension: "plist")
        // 到出数组
        let dataArr = NSArray(contentsOfURL: fileUrl!)
        // 快速遍历出数组中的字典
        for dic in dataArr!{
            // 创建对象
            let model = Model()
            // 将快速枚举值进行类型转换
            let dica:Dictionary = dic as! Dictionary
            
            // 数据转模型
            model.setValuesForKeysWithDictionary(dica)

            // 添加入数组中
            modelArr.addObject(model)
        }
    }
    // 区数
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1;
    }
    // 行数
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return modelArr.count;
    }
    // cell
     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        // 重用
        let cell:MyCell =  tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as! MyCell
        // 取消选中变黑
        cell.selectionStyle = UITableViewCellSelectionStyle.None
        // 取出对象
        let model = modelArr[indexPath.row] as! Model
        // 赋值
        cell.nameLabel.text = model.name
        cell.ageLabel.text = model.age
        cell.detailLabel.text = model.content
        return cell
    }
    
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 121;
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

效果图:

swift-Plist-Kvc.gif

github:https://github.com/Lafree317/Swift-Plist-KVC


复杂一点的

iOS-Swift-Plist-KVC_第4张图片
字典数组嵌套
let fileUrl = NSBundle.mainBundle().URLForResource("DetailList", withExtension: "plist")
        if let url = fileUrl {

            
            let Dic = NSDictionary(contentsOfURL: url)
            
            for (key,value) in Dic!{
                
                
                let valueArr:NSMutableArray! = []
                for dic in value as! NSArray {
                    let model = CreatDetailModel()
                    model.setValuesForKeysWithDictionary(dic as! [String : AnyObject])
                    valueArr.addObject(model)
                }
                dataDic.setValue(valueArr, forKey: key as! String)
            }
        }

你可能感兴趣的:(iOS-Swift-Plist-KVC)