在swift中连接嵌套的枚举字符串

时间:2018-04-23 23:50:20

标签: swift enums

我想声明一个枚举类型(比如,ParentEnum),它将用作函数的参数,它包含许多“子”枚举,并且子枚举的每个case使用子枚举的名称为一个前缀,这是一个例子:

enum ParentEnum: String {
    enum ChildEnum1: String {
        case c1 = "/ChildEnum1/c1"
        case c2 = "/ChildEnum1/c2"
    }
    enum ChildEnum2: String {
        case c1 = "/ChildEnum2/c1"
        case c2 = "/ChildEnum2/c2"
    }
    ...
}

有没有办法概括“/ ChildEnumX”部分所以我只需要将“/ cX”定义为rawValue,当我调用ParentEnum.ChildEnumX.c1时,它会给我“/ ChildEnumX / c1”之类的上面的例子。

我希望这是有道理的,先谢谢。

1 个答案:

答案 0 :(得分:0)

只记得要更新这篇文章,以防其他人遇到相同的问题,这是我想出的:

enum ParentEnum {
    case Child1(ChildEnum1)
    case Child2(ChildEnum2)

    enum ChildEnum1: String {
        case c1 = "/c1"
        case c2 = "/..."
    }
    enum ChildEnum2: String {
        case c1 = "/..."
        case c2 = "/..."
    }
    ...
    var rawValue: String {
        switch self {
        case .Child1(let child):
            return "ChildEnum1/\(child.rawValue)"
        case .Child2(let child):
            return "ChildEnum2/\(child.rawValue)"
        }
    }
}

如果将ParentEnum用作函数的参数,则.Child1(.c1).rawValue将产生"ChildEnum1/c1"。您还可以覆盖Child枚举的rawValue来进一步扩展嵌套级别。希望这会有所帮助。