Issue
I am looking for an elegant way to map an Optional
to an Array
. What I mean by that is the following:
- If the
Optional
is.none
, return an emptyArray<Wrapped>
- If the
Optional
is.some
, return a single elementArray<Wrapped>
Now this can be done like this
let seq = value.map { [$0] } ?? []
Unfortunately this gets quite ugly and illegible when you want to use it inline.
Is there a better method to accomplish this, without writing a extension
?
Solution
How about putting your optional in an array, and compactMap
that array with the identity function?
[yourOptional].compactMap { $0 }
As Martin R suggested, you can use CollectionOfOne
to save the creation of a throwaway array, at the cost of writing a few more characters:
CollectionOfOne(yourOptional).compactMap { $0 }
Answered By – Sweeper
Answer Checked By – Jay B. (BugsFixing Admin)