Swift Dictionary:获取数组的值
我有一个字典,其中包含由枚举值ColorScheme散列的UIColor对象: 
 var colorsForColorScheme: [ColorScheme : UIColor] = ... 
 我想能够提取包含在这个字典中的所有颜色(值)的数组。 我以为我可以使用values属性,就像迭代字典值时使用的那样( for value in dictionary.values {...} ),但是这会返回一个错误: 
 let colors: [UIColor] = colorsForColorSchemes.values ~~~~~~~~~~~~~~~~~~~~~^~~~~~~ 'LazyBidrectionalCollection<MapCollectionView<Dictionary<ColorScheme, UIColor>, UIColor>>' is not convertible to 'UIColor' 
 看来,不是返回一个值的Array , values方法返回一个更抽象的集合types。 有没有办法让一个Array包含字典的值,而不是在一个for-in循环中提取它们? 
 从Swift 2.0开始, Dictionary的values属性现在返回一个LazyMapCollection而不是LazyBidirectionalCollection 。  Arraytypes知道如何使用这个抽象集合types来初始化自己: 
 let colors = Array(colorsForColorSchemes.values) 
  Swift的types推断已经知道这些值是UIColor对象,所以不需要types转换,这很好! 
您也可以将字典映射到值的数组:
 let colors = colorsForColorScheme.map { $0.1 } 
Closure从字典中获取一个键值元组,并返回一个值。 所以,map函数产生一个数组值。
 你可以在LazyMapCollection上创build一个扩展 
 public extension LazyMapCollection { func toArray() -> [Element]{ return Array(self) } } 
  colorsForColorSchemes.values.toArray()或colorsForColorSchemes.keys.toArray()