DEV Community 👩‍💻👨‍💻

Khoa Pham
Khoa Pham

Posted on

Initializing Enums With Optionals in Swift

Original post

Today someone showed me\_Easy\_E/initializing-enums-with-optionals-in-swift-bf246ce20e4c which tries to init enum with optional value.

enum Planet: String {
  case mercury
  case venus
  case earth
  case mars
  case jupiter
  case saturn
  case uranus
  case neptune

extension RawRepresentable {
  init?(optionalValue: RawValue?) {
    guard let value = optionalValue else { return nil }
    self.init(rawValue: value)

let name: String? = "venus"
let planet = Planet(optionalValue: name)
Enter fullscreen mode Exit fullscreen mode

One interesting fact about optional, is that it is a monad, so it has map and flatMap. Since enum init(rawValue:) returns an optional, we need to use flatMap. It looks like this

let name: String? = "venus"
let planet = name.flatMap({ Planet(rawValue: $0) })
Enter fullscreen mode Exit fullscreen mode


Top comments (0)

Dream Big

Use any Linode offering to create something unique or silly in the DEV x Linode Hackathon 2022 and win the Wacky Wildcard category.

Join the Hackathon <-