gpt4 book ai didi

ios - Swift- 按类型访问枚举

转载 作者:行者123 更新时间:2023-11-29 01:40:33 24 4
gpt4 key购买 nike

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

关于ios - Swift- 按类型访问枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32441773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com