Swift Dictionary: récupère les valeurs sous forme de tableau

J’ai un dictionnaire contenant des objects UIColor hachés par une valeur enum, ColorScheme :

 var colorsForColorScheme: [ColorScheme : UIColor] = ... 

Je voudrais pouvoir extraire un tableau de toutes les couleurs (les valeurs) contenues dans ce dictionnaire. Je pensais pouvoir utiliser la propriété values , comme c’est le cas pour les itérations sur les valeurs du dictionnaire ( for value in dictionary.values {...} ), mais cela renvoie une erreur:

 let colors: [UIColor] = colorsForColorSchemes.values ~~~~~~~~~~~~~~~~~~~~~^~~~~~~ 'LazyBidrectionalCollection<MapCollectionView<Dictionary, UIColor>>' is not convertible to 'UIColor' 

Il semble que plutôt que de renvoyer un Array de valeurs, la méthode values renvoie un type de collection plus abstrait. Est-il possible d’obtenir un Array contenant les valeurs du dictionnaire sans les extraire dans une boucle for-in ?

À partir de Swift 2.0, la propriété de la values Dictionary renvoie désormais un LazyMapCollection au lieu de LazyBidirectionalCollection . Le type Array sait s’initialiser en utilisant ce type de collection abstrait:

 let colors = Array(colorsForColorSchemes.values) 

L’inférence de type de Swift sait déjà que ces valeurs sont des objects UIColor , donc aucune UIColor type n’est requirejse, ce qui est bien!

Vous pouvez également mapper dictionnaire à un tableau de valeurs:

 let colors = colorsForColorScheme.map { $0.1 } 

La fermeture prend un tuple de valeur-clé du dictionnaire et ne renvoie qu’une valeur. La fonction de carte produit donc un tableau de valeurs.

vous pouvez créer une extension sur LazyMapCollection

 public extension LazyMapCollection { func toArray() -> [Element]{ return Array(self) } } 

colorsForColorSchemes.values.toArray() ou colorsForColorSchemes.keys.toArray()

Utilisez colorsForColorScheme.map({$0.value})