[英]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.