Swift字典类

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

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

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

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

[html] view plaincopy

  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。
输出结果如下:

[html] view plaincopy

  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数组的示例代码:

[html] view plaincopy

  1. import Foundation
  2. var mutable : NSMutableDictionary = NSMutableDictionary()   ①
  3. // add objects
  4. mutable.setObject("Tom", forKey: "[email protected]")   ②
  5. mutable.setObject("Bob", forKey: "[email protected]")
  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方法添加键和值。
输出结果如下:

[html] view plaincopy

  1. 2014-07-06 20:42:11.596 PlaygroundStub_OSX[4332:303] {
  2. "[email protected]" = Bob;
  3. "[email protected]" = Tom;
  4. }
  5. 2014-07-06 20:42:11.605 PlaygroundStub_OSX[4332:303] [email protected] - Bob
  6. 2014-07-06 20:42:11.608 PlaygroundStub_OSX[4332:303] [email protected] – Tom

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

[html] view plaincopy

  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课堂微信公共平台

时间: 2024-12-22 19:39:53

Swift字典类的相关文章

[转]站在OC的基础上快速理解Swift的类与结构体

(阅读此文章前,您已经有一定的Object-C语法基础了!) 2014年,Apple推出了Swift,最近开始应用到实际的项目中. 首先我发现在编写Swift代码的时候,经常会遇到Xcode不能提示,卡顿,直接闪退等问题,尤其是在Swift和OC混编时.(不知道其他开发者是否也有这样的经历,但是我相信这样的问题,很快会得到解决) 然后感觉Swift并不像网上很多朋友说的那样简单.有很多细节问题是值得注意的,甚至有很多思路是颠覆了传统的开发语言的!又有很多特性是结合了其他编程语言的优点! Swif

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

Swift中,类和结构体都是对数据和方法进行封装的常用做法!首先我们来看看他们的共同之处: 都可以有属性和方法: 都有构造器: 都支持附属脚本: 都支持扩展: 都支持协议. 然后我们来看看他们的不同之处: 类有继承: 结构体有一个自动生成的逐一初始化构造器: 在做赋值操作时,结构体总是被拷贝(Array有特殊处理): 结构体可以声明静态的属性和方法: 从设计模式的角度来分析,类的设计更侧重于对功能的封装,而结构体的设计更侧重于对数据的封装.(汽车与书架来区分类与结构体) 一.构造过程 1. 默认

python中将普通对象作为 字典类(dict) 使用

目前我知道的有两种方法: 1 定义的类继承dict类 例如 class A(dict): pass a = A() a['name'] = 12 2 给自定义的类添加 __setitem__() __getitem__()方法 class A: def __init__(self, cfg={}): <strong><span style="color:#ff0000;">self.cfg = cfg</span></strong> de

swift字典集合-备

Swift字典表示一种非常复杂的集合,允许按照某个键来访问元素.字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合.键集合是不能有重复元素的,而值集合是可以重复的,键和值是成对出现的. 字典声明与初始化 Swift字典类型是Dictionary,也是一个泛型集合. 在声明一个Dictionary类型的时候可以使用下面的语句之一. [html] view plain copy print? var studentDictionary1: Dictionary<Int, S

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

Swift学习--类的定义,使用.继承,构造等(五) 类的使用说明 1 使用class和类名来创建一个类名,比如: class student 2 类中属性的声明和常量和变量一样,唯一的差别就是他们的上下文是类 3 方法和函数声明也一样 // 1 ---- 简单的类介绍 class Student{ //变量学号初始化为0 var num = 0; //成员函数 func GetNum()->Int{ return num } } //创建类的实例对象 var student = Student

字典类(十一)

字典类 键值对:key-value 键值对,用一个比喻来说,就是有一堆杂乱的,无序的货物,要怎么样去找到某个货物,并把货物拿出来.那么这里就要用标签去给货物贴上,这样就能在这堆货物里,通过标签,找到自己想要的货物了. 键值对就是类似于这样的存在,我们用一个键key来保存名字,用value来保存实际的值,这样就可以直接通过这个key来取到这个值value. key相当于货物的标签,value相当于实际的货物. 注意:一堆数据里,key不能重复. 不可变字典NSDictionary: 字典是用来保存

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

目前我知道的有两种方法: 1 定义的类继承dict类 例如 class A(dict): pass a = A() a['name'] = 12 2 给自定义的类添加 __setitem__() __getitem__()方法 class A: def __init__(self, cfg={}): self.cfg = cfg def __setitem__(self, key, value): self.cfg[key] = value def __getitem__(self, key):

Objective-C中字典类

字典是用于保存具有映射关系(key-value对)的数据集合.一个key-value对认为是一个条目(Entry),字典是存储key-value对的容器. 字典类的特点 与数组不同,字典靠key存取元素; key值不能重复,value必须是对象; 键值对在字典中是无序存储的. 字典分为不可变字典(NSDictionary)和可变字典(NSMutableDictionary). 不可变字典(NSDictionary) 字典一旦创建,键值对不可更改,不可添加, 不可删除. 仅能读取key或value

Swift 的类、结构体、枚举等的构造过程Initialization(上)

构造过程是为了使用某个类.结构体或枚举类型的实例而进行的准备过程.这个过程包含了为实例中的每个属性设置初始值和为其执行必要的准备和初始化任务. 构造过程是通过定义构造器(Initializers)来实现的,这些构造器可以看做是用来创建特定类型实例的特殊方法.与 Objective-C 中的构造器不同,Swift 的构造器无需返回值,它们的主要任务是保证新实例在第一次使用前完成正确的初始化. 类实例也可以通过定义析构器(deinitializer)在类实例释放之前执行特定的清除工作.想了解更多关于