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
。 Array
types知道如何使用这个抽象集合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()