zoukankan      html  css  js  c++  java
  • Swift

    每次在Xcode中新建一个iOS项目后,都会自己产生一个.plist文件,里面记录项目的一些配置信息。我们也可以自己创建.plist文件来进行数据的存储和读取。
     
    .plist文件其实就是一个XML格式的文件,其支持的数据类型有(NS省略)Dictionary、Array、Boolean、Data、Date、Number、String这些类型。
    当然对于用户自定义的对象,通过NSCoder转换后也是可以进行存储的。(常见我的另一篇文章“Swift - 本地数据的保存与加载(使用NSCoder将对象保存到.plist文件)”)

    本文主要介绍如何使用.plist文件进行数组,字典,字符串等这些基本数据类型的存储和读取。
    由于不需要转化,所以用起来还是很方便的。而且在大多数情况下,使用基本数据类型就足够了。

    1,数组(Array)的存储和读取
    (1)存储
    下面把一个数组写入plist文件中(保存在用户文档目录),数组内是各个网站的地址。
    1
    2
    3
    let array = NSArray(objects: "hangge.com","baidu.com","google.com","163.com","qq.com")
    let filePath:String = NSHomeDirectory() + "/Documents/webs.plist"
    array.writeToFile(filePath, atomically: true)
    进入目录打开webs.plist,可以看到生成的数据如下:
    原文:Swift - .plist文件数据的读取和存储

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <array>
        <string>hangge.com</string>
        <string>baidu.com</string>
        <string>google.com</string>
        <string>163.com</string>
        <string>qq.com</string>
    </array>
    </plist>

    (2)读取
    下面把webs.plist文件中数据读取出来显示在表格里
    原文:Swift - .plist文件数据的读取和存储
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    import UIKit
     
    class ViewController: UIViewController , UITableViewDelegate, UITableViewDataSource{
     
         
        @IBOutlet weak var tableView: UITableView!
         
        var webs:NSArray?
     
        override func viewDidLoad() {
            super.viewDidLoad()
             
            webs = NSArray(contentsOfFile: NSHomeDirectory() + "/Documents/webs.plist")
            self.tableView!.delegate = self
            self.tableView!.dataSource = self
            //创建一个重用的单元格
            self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell0")
        }
         
        func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return webs!.count
        }
         
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
            -> UITableViewCell {
            let cell = tableView.dequeueReusableCellWithIdentifier("cell0",
                forIndexPath: indexPath) as UITableViewCell
            let url = webs![indexPath.row] as! String
            cell.textLabel?.text = url
            return cell
        }
     
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    }

    2,字典(Dictionary)的存储和读取 
    下面给每条网址都附上网站名,这时我们就要使用字典了。
    (1)存储
    除了每条网站记录使用字典类型,外面还拆分成两个数组分别存储,用于下面表格的分区展示。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    let myArray = [
            [
                ["name":"航歌", "url":"hangge.com"],
                ["name":"百度", "url":"baidu.com"],
                ["name":"google", "url":"google.com"]
            ],
            [
                ["name":"163", "url":"163.com"],
                ["name":"QQ", "url":"qq.com"]
            ]
       //声明一个字典
             
    let filePath:String = NSHomeDirectory() + "/Documents/webs.plist"
    NSArray(array: myArray).writeToFile(filePath, atomically: true)
    print(filePath)
    进入目录打开webs.plist,可以看到生成的数据如下:
    原文:Swift - .plist文件数据的读取和存储
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <array>
        <array>
            <dict>
                <key>name</key>
                <string>航歌</string>
                <key>url</key>
                <string>hangge.com</string>
            </dict>
            <dict>
                <key>name</key>
                <string>百度</string>
                <key>url</key>
                <string>baidu.com</string>
            </dict>
            <dict>
                <key>name</key>
                <string>google</string>
                <key>url</key>
                <string>google.com</string>
            </dict>
        </array>
        <array>
            <dict>
                <key>name</key>
                <string>163</string>
                <key>url</key>
                <string>163.com</string>
            </dict>
            <dict>
                <key>name</key>
                <string>QQ</string>
                <key>url</key>
                <string>qq.com</string>
            </dict>
        </array>
    </array>
    </plist>
    (2)读取
    下面把webs.plist文件中数据读取出来,并在表格里分区显示
    原文:Swift - .plist文件数据的读取和存储
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    import UIKit
     
    class ViewController: UIViewController , UITableViewDelegate, UITableViewDataSource{
         
        @IBOutlet weak var tableView: UITableView!
         
        var webs:NSArray?
     
        override func viewDidLoad() {
            super.viewDidLoad()
             
            webs = NSArray(contentsOfFile: NSHomeDirectory() + "/Documents/webs.plist")
            self.tableView!.delegate = self
            self.tableView!.dataSource = self
            //创建一个重用的单元格
            self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell0")
     
        }
         
        // UITableViewDataSource协议中的方法,该方法的返回值决定指定分区的头部
        func tableView(tableView:UITableView, titleForHeaderInSection
            section:Int)->String?
        {
            return " ";
        }
         
        //在本例中,有2个分区
        func numberOfSectionsInTableView(tableView: UITableView) -> Int {
            return webs!.count;
        }
         
        //每个分区的记录数
        func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            let data = self.webs?[section]
            return data!.count
        }
         
        //每个单元格创建和内容赋值
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
            -> UITableViewCell {
            let cell = UITableViewCell(style: UITableViewCellStyle.Value1,
                reuseIdentifier: "cell0")
            let data = self.webs?[indexPath.section]
            let url = data![indexPath.row]["url"] as! String
            let name = data![indexPath.row]["name"] as! String
            cell.textLabel?.text = name
            cell.detailTextLabel?.text = url
            return cell
        }
     
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    }

    原文出自:www.hangge.com  转载请保留原文链接:http://www.hangge.com/blog/cache/detail_888.html
  • 相关阅读:
    idea快捷的输出常用语句
    OneinStack基础搭建typecheo轻量级博客
    自动化框架介绍及使用
    jenkins配置自动化
    selenium模拟鼠标点击
    Linux下安装nginx
    解决“chrome正受到自动测试软件的控制”信息栏显示问题
    Git 常用操作
    ZendStudio自定义代码补全,自定义代码段
    07-python之装饰器
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4858379.html
Copyright © 2011-2022 走看看