在Foundation框架中提供一种字典集合,它是由“键-值”对构成的集合。键集合不能重复,值集合没有特殊要求。键和值集合中的元素可以是任何对象,但是不能是nil。Foundation框架字典类也分为NSDictionary不可变字典和NSMutableDictionary可变字典。
一、NSDictionary类

NSDictionary有很多方法和属性,下面总结其常用的方法和属性。

initWithDictionary: 构造器,通过Swift的Dictionary创建NSDictionary对象。

initWithObjects:forKeys: 构造器,通过键集合和值集合创建NSDictionary对象。
count 字典集合的长度。
objectForKey: 通过键获得值对象。
allKeys: 返回所有键集合。
下面看NSDictionary数组的示例代码:

  1. import Foundation
  2. let keyString : NSString = "one two three four five"    ①
  3. var keys : NSArray = keyString.componentsSeparatedByString(" ") ②
  4. let valuestring : NSString = "alpha bravo charlie delta echo"   ③
  5. var values : NSArray = valuestring.componentsSeparatedByString(" ") ④
  6. vardict : NSDictionary = NSDictionary(objects: keys, forKeys:values)    ⑤
  7. NSLog("%@", dict.description)   ⑥
  8. varvalue:NSString = dict.objectForKey("three") as NSString  ⑦
  9. NSLog("three = %@", value)
  10. varkys = dict.allKeys       ⑧
  11. for item : AnyObject in kys {   ⑨
  12. var key = item as NSString
  13. NSLog("%@ - %@", key, dict.objectForKey(key) as NSString)
  14. }

上述代码第①行和第③行代码是NSString字符串,字符串由单词和空格组成。第②行和第④行代码使用空格分割字符串,返回类型是NSArray数组。
第⑤行代码实例化NSDictionary对象,objects参数是值数组values,forKeys参数是。第⑥行代码description属性是获得字典的内容。第⑦行代码是通过objectForKey方法读取键对应的值,并且转换为NSString类型。
第⑧行代码dict.allKeys是获得所有的键集合kys,第⑨行代码是遍历键集合kys。
输出结果如下:

  1. 2014-07-06 20:19:07.274 PlaygroundStub_OSX[4110:303] {
  2. five = echo;
  3. four = delta;
  4. one = alpha;
  5. three = charlie;
  6. two = bravo;
  7. }
  8. 2014-07-06 20:19:07.281 PlaygroundStub_OSX[4110:303] three = charlie
  9. 2014-07-06 20:19:07.296 PlaygroundStub_OSX[4110:303] one - alpha
  10. 2014-07-06 20:19:07.300 PlaygroundStub_OSX[4110:303] five - echo
  11. 2014-07-06 20:19:07.305 PlaygroundStub_OSX[4110:303] three - charlie
  12. 2014-07-06 20:19:07.308 PlaygroundStub_OSX[4110:303] two - bravo
  13. 2014-07-06 20:19:07.313 PlaygroundStub_OSX[4110:303] four - delta

二、NSMutableDictionary类
NSMutableDictionary是NSDictionary的子类,它有很多方法和属性,下面总结其常用的方法和属性。
-setObject:forKey: 通过键和值。
-removeObjectForKey: 按照键移除值。
下面看NSDictionary数组的示例代码:

  1. import Foundation
  2. var mutable : NSMutableDictionary = NSMutableDictionary()   ①
  3. // add objects
  4. mutable.setObject("Tom", forKey: "tom@jones.com")   ②
  5. mutable.setObject("Bob", forKey: "bob@dole.com")
  6. NSLog("%@", mutable.description)
  7. var keys = mutable.allKeys
  8. for item : AnyObject in keys {
  9. var key = item as NSString
  10. NSLog("%@ - %@", key, mutable.objectForKey(key) as NSString)
  11. }

上述代码第①行是实例化NSMutableDictionary,第②行代码是通过setObject方法添加键和值。
输出结果如下:

  1. 2014-07-06 20:42:11.596 PlaygroundStub_OSX[4332:303] {
  2. "bob@dole.com" = Bob;
  3. "tom@jones.com" = Tom;
  4. }
  5. 2014-07-06 20:42:11.605 PlaygroundStub_OSX[4332:303] bob@dole.com - Bob
  6. 2014-07-06 20:42:11.608 PlaygroundStub_OSX[4332:303] tom@jones.com – Tom

三、NSDictionary与Dictionary之间的关系
NSDictionary与Dictionary之间的关系如同NSArray与Array之间的关系,Swift在底层能够将它们自动地桥接起来,一个NSDictionary对象桥接之后的结果是[NSObject : AnyObject]字典(值为NSObject 类型,键为AnyObject 类型的Dictionary字典)。
下面我们看一个使用Dictionary和NSDictionary的示例:

  1. import Foundation               ①
  2. let keyString : NSString = "one two three four five"
  3. let keys : NSArray = keyString.componentsSeparatedByString(" ")
  4. let valueString : NSString = "alpha bravo charlie delta echo"
  5. let values : NSArray = valueString.componentsSeparatedByString(" ")
  6. let foundationDict : NSDictionary = NSDictionary(objects:values, forKeys:keys)  ②
  7. let swiftDict : Dictionary = foundationDict ③
  8. println(swiftDict.description)
  9. let value: AnyObject? = swiftDict["three"]  ④
  10. println("three = \(value)")
  11. for (key, value) in swiftDict { ⑤
  12. println ("\(key) - \(value)")
  13. }

代码第①行是引入Foundation。第②行代码声明并初始化NSDictionary字典,第③行代码是将NSDictionary字典赋值给Dictionary字典,这个过程也发生了类型转换,不仅是NSDictionary到Dictionary的转换,而且它们的内部元素也发生了转换。

第④行代码是从Dictionary字典取three键对应的值,它的类型是可选的AnyObject类型,这是因为有可能取不到这个值。第⑤行代码是遍历Dictionary字典键和值集合。

更多内容请关注国内第一本Swift图书《Swift开发指南》
本书交流讨论网站:http://www.51work6.com/swift.php
欢迎加入Swift技术讨论群:362298485

欢迎关注智捷iOS课堂微信公共平台

Swift字典类的更多相关文章

  1. 站在OC的基础上快速理解Swift的类与结构体

    阅读此文章前,您已经有一定的Object-C语法基础了!) 2014年,Apple推出了Swift,最近开始应用到实际的项目中. 首先我发现在编写Swift代码的时候,经常会遇到Xcode不能提示,卡 ...

  2. swift 构建类

    参开 http://blog.csdn.net/chelongfei/article/details/49784633 在 Swift 中, 类的初始化有两种方式, 分别是 Designated In ...

  3. [转载]python中将普通对象作为 字典类(dict) 使用

    目前我知道的有两种方法: 1 定义的类继承dict类 例如 class A(dict): pass a = A() a['name'] = 12 2 给自定义的类添加 __setitem__() __ ...

  4. C#中的Dictionary字典类介绍

      Dictionary字典类介绍 必须包含名空间System.Collection.Generic    Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值)    键必须是 ...

  5. swift字典集合-备

    Swift字典表示一种非常复杂的集合,允许按照某个键来访问元素.字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合.键集合是不能有重复元素的,而值集合是可以重复的,键和值是成 ...

  6. Page_Load接收随机参数放到字典类中

    Page_Load接收随机参数放到字典类中,可以用作签名.普通的接收url的参数可以用作下面这种模式:  int appid =Convert.ToInt32(param["appid&qu ...

  7. 编程写一个方法时,注意方法中传参数的数量最好不要超过5个,超过5个怎么办?可以用struct或class,或一个字典类

    图  1 一.从图1发现了什么问题呢? 答案:1.参数传的的太多了:2.另外注释也没写好. 说明:一个方法中,传参数的数量最好不要超过5个. 应该采用:struct或class,或一个字典类都行.其中 ...

  8. 孤荷凌寒自学python第十一天初识Python的字典类

    孤荷凌寒自学python第十一天初识Python的字典类 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python的字典其实是一张二维对照表 下面举例说明: 键名Key 姓名 性别 身高 ...

  9. Swift学习——类的定义,使用,继承,构造等(五)

    Swift学习--类的定义,使用.继承,构造等(五) 类的使用说明 1 使用class和类名来创建一个类名,比如: class student 2 类中属性的声明和常量和变量一样,唯一的差别就是他们的 ...

随机推荐

  1. AndroidCharts为折线图表添加y坐标

    AndroidCharts 是一款轻量级的图表显示控件,对比起Android-Charts和AChartEngine来说简单和活泼了很多,适合数据展示不需要太过详细专业的场合,它支持简单且带动画的折线 ...

  2. sql prompt格式设置

    sql prompt格式设置. 格式前: 格式后:

  3. 修改 SVN 账户密码的方法

    记是记不住 的,即便是每天都在用的东西,也有貌似熟悉其实很陌生的时候,或者说根本就是不熟悉.于是需要拿出来经常翻翻,比如我们的SVN账户配置,很简单的一个 case,你可能是svn使用高手,但不一定记 ...

  4. Excel设置数据有效性实现单元格下拉菜单的3种方法(转)

    http://blog.csdn.net/cdefu/article/details/4129136 一.直接输入: 1.选择要设置的单元格,譬如A1单元格: 2.选择菜单栏的“数据”→“有效性”→出 ...

  5. zookeeper的C#Client

    最近在搭一套soa,  服务使用java/scala 的finagle 协议使用thrift 然后 finagle默认服务端会是使用zookeeper作为节点存储.. 所以想要访问具体服务,需要先通过 ...

  6. 【WinForm】使用NSIS发布程序

    简介 NSIS(Nullsoft Scriptable Install System)是一个开源的 Windows 系统下安装程序制作程序.它提供了安装.卸载.系统设置.文件解压缩等功能 使用 以下是 ...

  7. 关于2000W数据

    前几天在博客园首页看到这个2000W数据的消息,刚好这个学期正在SQL入门,加上好奇心的驱使,把这个下载下来. 一个是600多M的CSV文件,还有一个是1.7G的SQL Server的备份文件,解压后 ...

  8. Uestc_suibian 暑假集训总结

    唉,终于组队了,终于可以只BB了,我就BB,我就不上! 和Xiper以及chenxh组队了- 下面是总结: day1 第一天吃饱喝足,然后就上路了,我一开始就看到了C题大水题,但是我不敢想象这道题居然 ...

  9. lightOJ 1030(期望)

    题意:有一个迷宫是1×n的格子,一个人每到一个格子就能够把这个格子内的金子所有拿走,刚開始站在第1个格子,然后開始掷骰子得到点数x,他就要从当前位置走到加x的位置.假设发现位置是大于n的就又一次掷骰子 ...

  10. C++ C++ 控制台程序 设置图标

    . 实现过程 创建1个控制台程序. 新建1个 Resource Script文件 #include "stdio.h" #include <windows.h> #in ...