Swift3的Dictionary和OC的NSDictionary关系

   Swift3的Dictionary和OC的NSDictionary关系

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

 NSDictionaryDictionary之间的关系如同NSArrayArray之间的关系,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字典键和值合。