swift - How do you use a switch statement with a nested enum? -
i'm getting error on switch statement below path
.
enum case
search
not member of type
enum instagram { enum media { case popular case shortcode(id: string) case search(lat: float, lng: float, distance: int) } enum users { case user(id: string) case feed case recent(id: string) } } extension instagram: targettype { var path: string { switch self { case .media.search(let _, let _, let _): return "/media/search" } } }
i want use switch statement return path, cases giving me errors. there way work?
this using advanced enums: https://github.com/terhechte/appventure-blog/blob/master/resources/posts/2015-10-17-advanced-practical-enum-examples.org#api-endpoints
i'm adding more general answer few reasons.
- this open question regarding nested enums , switch statements. the other 1 sadly closed.
- the legit answer not show how assign value of nested enum symbol. syntax not intuitive me.
- none of other answers have extensive case examples.
- an enum nested 3 levels deep more illustrative of required syntax. using efremidze answer above still took me while work out.
an example:
enum action { enum f { enum { case fail case success } enum d { case fail case success } enum h { case none case } case attack(a) case defend(d) case hurt(h) } enum w { case swing case } case fighter(f) case weapon(w) } // matches "3 deep" let action = action.fighter(.attack(.fail)) // matches "1 deep" because more general case listed first. let action2 = action.weapon(.swing) switch action { case .fighter(.attack(.fail)): print("3 deep") case .weapon: print("1 deep") case .weapon(.swing): print("2 deep case") case .fighter(.attack): print("2 deep enum level") default: print("wtf enum") }
Comments
Post a Comment