enum方法返回动态类型



我有一个枚举,我想创建一个方法,为每个情况返回不同的类型。

例如,我有一本字典[String: Any]。为了处理这些值,我使用枚举创建一个键数组:

enum Foo {
case option1
case option2
func createKey() -> [String] {
switch self {
case .option1: return ["scenario1"]
case .option2: return ["scenario2"]
}
}
}

一旦我有了值,我就需要将它们强制转换为正确的类型,以便能够使用它们。现在我正在使用if-statements手动执行,但如果我能在枚举中创建一个方法来返回正确的类型,这将减少大量代码。我当前的代码:

let origin: [String: Any] = ["scenario2": "someText"]
let option: Foo = .option2
option.createKey().forEach {
guard let rawValue = origin[$0] else { return }
switch option {
case .option1:
guard let value = rawValue as? Int else { return }
print("Value is an Int:", value)
case .option2:
guard let value = rawValue as? String else { return }
print("Value is a String:", value)
}
}

我想实现的是:

option.createKey().forEach {
guard let rawValue = origin[$0] as? option.getType() else { return }
}

这可能吗?

我认为这里问题的核心是Swift有严格的类型。这意味着类型在编译时必须是已知的。这显然是合法的:

let s : Any = "howdy"
if let ss = s as? String {
print(ss)
}

但这是不合法的:

let s : Any = "howdy"
let someType = String.self
if let ss = s as? someType { // *
print(ss)
}

someType必须是类型;它不能是一个在自身内部隐藏类型的变量。但实际上,这正是你要求做的

相关内容

最新更新