Swift Dictionary:如何获取数组的值

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (46)

我有一个字典包含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'

它似乎不是返回一个Array值,而是values返回一个更抽象的集合类型。有没有办法获得一个Array包含字典的值,而不需要在for-in循环中提取它们?

提问于
用户回答回答于

Dictionaryvalues属性现在返回LazyMapCollection,而不是一个LazyBidirectionalCollection。该Array类型知道如何使用这种抽象集合类型来初始化它自己:

let colors = Array(colorsForColorSchemes.values)

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

用户回答回答于

还可以将字典映射到值数组:

let colors = colorsForColorScheme.map { $0.1 }

闭包从字典中获取一个键值元组,并只返回一个值。因此,map函数生成一个值数组。

扫码关注云+社区