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' 

看来,不是返回一个值的Arrayvalues方法返回一个更抽象的集合types。 有没有办法让一个Array包含字典的值,而不是在一个for-in循环中提取它们?

从Swift 2.0开始, Dictionaryvalues属性现在返回一个LazyMapCollection而不是LazyBidirectionalCollectionArraytypes知道如何使用这个抽象集合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()