gpt4 book ai didi

swift - 返回动态类型的枚举方法

转载 作者:行者123 更新时间:2023-11-30 12:45:24 28 4
gpt4 key购买 nike

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

例如,我有一本字典[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 必须是类型;它不能是隐藏其自身类型的变量。但这实际上正是您要求做的。

关于swift - 返回动态类型的枚举方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41699534/

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