Swift3的Dictionary和OC的NSDictionary关系

在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字典键和值集合。

你可能感兴趣的:(Swift3的Dictionary和OC的NSDictionary关系)