簡體   English   中英

快速訪問按類型枚舉

[英]Swift- access enumeration by type

我在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;
    }
}

問題是我必須為枚舉中的每種情況復制此函數。

您可以使用通用的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM