我有一个字典,其中包含通过枚举值ColorScheme
散列的UIColor
对象
var colorsForColorScheme: [ColorScheme : UIColor] = ...
我希望能够提取这个字典包含的所有颜色(值)的数组。我认为我可以使用在迭代字典值(for value in dictionary.values {...}
)时使用的values
属性,但这将返回一个错误:
let colors: [UIColor] = colorsForColorSchemes.values
~~~~~~~~~~~~~~~~~~~~~^~~~~~~
'LazyBidrectionalCollection<MapCollectionView<Dictionary<ColorScheme, UIColor>, UIColor>>' is not convertible to 'UIColor'
values
方法似乎不是返回值的Array
,而是返回一个更抽象的集合类型。有没有一种方法可以在不从for-in
循环中提取字典值的情况下获得包含这些值的Array
?
发布于 2014-11-18 14:41:47
从SWIFT2.0开始,Dictionary
的values
属性现在返回LazyMapCollection
而不是LazyBidirectionalCollection
。Array
类型知道如何使用此抽象集合类型初始化自身:
let colors = Array(colorsForColorSchemes.values)
Swift的类型推断已经知道这些值是UIColor
对象,所以不需要类型转换,这很好!
发布于 2017-12-18 17:46:00
使用colorsForColorScheme.map({$0.value})
发布于 2016-11-05 11:07:57
您可以在LazyMapCollection
上创建扩展模块
public extension LazyMapCollection {
func toArray() -> [Element]{
return Array(self)
}
}
colorsForColorSchemes.values.toArray()
或colorsForColorSchemes.keys.toArray()
https://stackoverflow.com/questions/26988167
复制相似问题