一尘不染

Swift字典:以数组形式获取值

swift

我有一本字典,其中包含UIColor用枚举值散列的对象ColorScheme

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方法返回了一个更抽象的集合类型,而不是返回值的an 。有没有一种方法可以获取Array包含字典值的而不for- in循环提取它们的值?


阅读 300

收藏
2020-07-07

共1个答案

一尘不染

从Swift
2.0开始,Dictionaryvalues属性现在返回LazyMapCollection而不是LazyBidirectionalCollection。该Array类型知道如何使用此抽象集合类型进行初始化:

let colors = Array(colorsForColorSchemes.values)

Swift的类型推断已经知道这些值是UIColor对象,因此不需要类型转换。这很好!

2020-07-07