arrays - dictionaries - Swift Dictionary: obtener valores como matriz
nsdictionary swift 4 (4)
A partir de Swift 2.0, la propiedad values
Dictionary
ahora devuelve una LazyMapCollection
lugar de una LazyBidirectionalCollection
. El tipo de Array
sabe cómo inicializarse utilizando este tipo de colección abstracta:
let colors = Array(colorsForColorSchemes.values)
La inferencia de tipos de Swift ya sabe que estos valores son objetos UIColor
, por lo que no se requiere ningún tipo de conversión, ¡lo cual es bueno!
Tengo un diccionario que contiene objetos UIColor
hash por un valor enum, ColorScheme
:
var colorsForColorScheme: [ColorScheme : UIColor] = ...
Me gustaría poder extraer una matriz de todos los colores (los valores) contenidos en este diccionario. Pensé que podría usar la propiedad de values
, como se usa al iterar sobre los valores del diccionario ( for value in dictionary.values {...}
), pero esto devuelve un error:
let colors: [UIColor] = colorsForColorSchemes.values
~~~~~~~~~~~~~~~~~~~~~^~~~~~~
''LazyBidrectionalCollection<MapCollectionView<Dictionary<ColorScheme, UIColor>, UIColor>>'' is not convertible to ''UIColor''
Parece que en lugar de devolver una Array
de valores, el método de values
devuelve un tipo de colección más abstracto. ¿Hay alguna manera de obtener una Array
contenga los valores del diccionario sin extraerlos en un bucle for-in
?
También puede asignar diccionario a una matriz de valores:
let colors = colorsForColorScheme.map { $0.1 }
El cierre toma una tupla de clave-valor del diccionario y devuelve solo un valor. Entonces, la función de mapa produce una matriz de valores.
Use colorsForColorScheme.map({$0.value})
puedes crear una extensión en LazyMapCollection
public extension LazyMapCollection {
func toArray() -> [Element]{
return Array(self)
}
}
colorsForColorSchemes.values.toArray()
o colorsForColorSchemes.keys.toArray()