在Foundation框架中提供一种字典集合,它是由“键-值”对构成的集合。键集合不能重复,值集合没有特殊要求。键和值集合中的元素可以是任何对象,但是不能是nil。Foundation框架字典类也分为NSDictionary不可变字典和NSMutableDictionary可变字典。
NSDictionary与Dictionary之间的关系如同NSArray与Array之间的关系,Swift在 层能够将它们自动地桥接起来,一个NSDictionary对象桥接之后的结果是[NSObject : AnyObject]字典(值为NSObject类型,键为AnyObject类型的Dictionary字典)。
1 | import Foundation
2 | let keyStr : NSString = "one two three four five"
3 | let keys : NSArray = keyStr.components(separatedBy: " ")
4 | let valueStr : NSString = "swift Object-C java C PHP"
5 | let values : NSArray = valueStr.components(separatedBy: " ")
6 | let foundationDict : NSDictionary = NSDictionary(objects:values as [AnyObject], forKeys:keys as! [NSCopying])
7 | let swiftDict : Dictionary = foundationDict as Dictionary
8 | print("字典:\(swiftDict.description)")
9 | let value: AnyObject? = swiftDict["three"]
10 | print("threeValue:\(value!)")
11 | for (key, value) in swiftDict {
12 | print("key:\(key) - value:\(value)")
13 | }
运行结果如下:
字典:[one: swift, five: PHP, three: java, two: Object-C, four: C]
threeValue:java
key:one - value:swift
key:five - value:PHP
key:three - value:java
key:two - value:Object-C
key:four - value:C
上述代码中,第1行是引入Foundation。第6行代码声明并初始化NSDictionary字典,第7行代码是NSDictionary字典赋值给Dictionary字典,这个过程也发生了类型转换,不仅是NSDictionary到Dictionary的转换,而且它们的内部元素也发生了转换。
第10行代码是从Dictionary字典取three键对应的值,它的类型是可选的AnyObject类型,这是因为有可能取不到这个值。第11行代码是遍历Dictionary字典键和值集合。