在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. [1.1]Knowledge that should be prepared

    Actually, there are a huge amount of knowledge we need to learn. So I hope you don't be scared. It's ...

  2. iis 启用父目录路径访问

    今天公司有个客户保修网站后台无法访问,我查看了源代码,发现ASP代码本身并没有什么问题.而且我下到本地能够访问.就是在网上不能正常连接,显示入下错误: Server.MapPath() 错误 'ASP ...

  3. cocos2d-x 1970毫秒数转时间

    转自:http://www.cocos2dev.com/?p=322 做网络游戏时,服务器的时间在本地显示的时候要转成本地时间,可以利用系统函数转化. ";//假如这是服务器的时间 ] = ...

  4. ios 7.1 7.1.1 半完美越狱后 电脑訪问手机越狱文件夹的方法

    7.1和7.1.1因为越狱不成熟,半完美越狱后电脑上无法訪问系统越狱文件夹,如var usr 等等. 今天有些意外地发现,能够在电脑上使用手机的越狱文件夹我手机 i4 7.1.1 联通 半完美越狱,没 ...

  5. synthesize(合成) keyword in IOS

    synthesize creates setter and getter (从Objective-C 2.0开始,合成可自动生成存取方法) the setter is used by IOS to s ...

  6. Caching in ASP.NET MVC

    The caching options available in ASP.NET MVC applications don’t come from the ASP.NET MVC Framework, ...

  7. Codeforces Gym 100513M M. Variable Shadowing 暴力

    M. Variable Shadowing Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513/ ...

  8. [Jest] Test JavaScript with Jest

    Let's learn how to unit test your JavaScript with Jest, a JavaScript unit testing framework from Fac ...

  9. centos x86_64--------------------------------系统调用

    http://blog.csdn.net/hmsiwtv/article/details/11022241 [root@monitor ~]# cat /usr/include/asm/unistd. ...

  10. PYTHON 源码阅读

    http://www.wklken.me/posts/2015/09/29/python-source-gc.html http://www.wklken.me/archives.html https ...