loading...

Initializing Enums With Optionals in Swift

onmyway133 profile image Khoa Pham ・1 min read

Original post https://github.com/onmyway133/blog/issues/49

Today someone showed me https://medium.com/@\_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)

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) })

🎉

Posted on by:

onmyway133 profile

Khoa Pham

@onmyway133

My apps https://onmyway133.com/apps/

Discussion

pic
Editor guide