Swift Dictionary: Get values as array
Solution 1:
As of Swift 2.0, Dictionary
’s values
property now returns a LazyMapCollection
instead of a LazyBidirectionalCollection
. The Array
type knows how to initialise itself using this abstract collection type:
let colors = Array(colorsForColorSchemes.values)
Swift's type inference already knows that these values are UIColor
objects, so no type casting is required, which is nice!
Solution 2:
You can map dictionary to an array of values:
let colors = colorsForColorScheme.map { $0.1 }
Closure takes a key-value tuple from dictionary and returns just a value. So, map function produces an array of values.
More readable version of the same code:
let colors = colorsForColorScheme.map { (scheme, color) in
return color
}
UPDATE
From Xcode 9.0, dictionary values can be accessed using values
property, which conforms to Collection
protocol:
let colors = colorsForColorScheme.values
Typically you just want it as an array:
let colors = Array(dict.values)
and that's it.