我有一个枚举,我想为每个案例创建一个返回不同类型的方法。
例如,我有一个字典[String: Any]
。要使用枚举来处理值I,以创建一个键数组:
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 }
}
这可能吗?
答案 0 :(得分:0)
我认为问题的核心是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
必须是类型;它不能是隐藏自身内部类型的变量。但这正是你要求做的事情。