我有一个枚举,我想创建一个方法来为每种情况返回不同的类型。
例如,我有一本字典[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
必须是一个type;它不能是隐藏其自身类型的变量。但这实际上正是您要求做的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)