Swift-按类型访问枚举

时间:2015-09-07 15:13:11

标签: ios swift

我在Swift中得到了一个枚举。它有点像

enum LegalArgs {
    case AsString(String)
    case AsBool(Bool)
    ... etc
}

我想通过类型有条件地访问此枚举。所以,如果我有一个LegalArgs的实例,我可以通过T并获得一个T?如果实例属于那种类型。否则,我将不得不为不同的情况复制一堆代码。

我目前的代码看起来有点像这样:

String? maybeAsString(arg: LegalArgs) {
    switch arg {
    case .AsString(let str):
        return str;
    default:
        return nil;
    }
}

问题是我必须为枚举中的每个案例复制此函数。

1 个答案:

答案 0 :(得分:1)

您可以使用通用asType功能:

enum LegalArgs {
    case AsString(String)
    case AsBool(Bool)
    case AsNumber(Int)

    func asType<T>(type: T.Type) -> T? {
        switch self {
        case AsString(let str): return str as? T
        case AsBool(let bol): return bol as? T
        case AsNumber(let num): return num as? T
        }
    }
}

// usage
LegalArgs.AsBool(true).asType(Bool.self) // true
LegalArgs.AsBool(true).asType(String.self) // nil