如何使用带有嵌套枚举的 switch 语句? [英] How do you use a switch statement with a nested enum?

查看:39
本文介绍了如何使用带有嵌套枚举的 switch 语句?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我为 Instagram 端点创建了一个枚举,其嵌套枚举类似于 Moya.

I've created an enum for Instagram endpoints with nested enums similar to Moya.

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

我想返回每个端点的路径.

I would like to return the path for each endpoint.

extension Instagram: TargetType {
    var path: String {
        switch self {
        case .Media.Shortcode(let id):
            return "/media/shortcode"
        }
    }
}

但是,我在上述 path 的 switch 语句中遇到错误.

However I'm getting an error on the switch statement above for the path.

枚举案例 Shortcode 不是 Instagram

如何解决?

高级实用枚举

推荐答案

出于几个原因,我添加了一个更通用的答案.

I'm adding a more general answer for a few reasons.

  1. 这是关于嵌套枚举和 switch 语句的唯一悬而未决的问题.另一个遗憾地关闭了.
  2. 唯一合法的答案没有显示如何将嵌套枚举的值分配给符号.语法对我来说并不直观.
  3. 其他答案都没有广泛的案例.
  4. 嵌套 3 层的枚举更能说明所需的语法.使用 efremidze 答案仍然需要我一段时间才能解决.


enum Action {
    case fighter(F)
    case weapon(W)

    enum F {
        case attack(A)
        case defend(D)
        case hurt(H)

        enum A {
            case fail
            case success
        }
        enum D {
            case fail
            case success
        }
        enum H {
            case none
            case some
        }
    }
    enum W {
        case swing
        case back
    }
}

// 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 to case")
case .fighter(.attack):
    print("2 deep to another enum level")
default:
    print("WTF enum")
}

这篇关于如何使用带有嵌套枚举的 switch 语句?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆