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