У меня есть перечисление, и я бы хотел создать метод для возврата другого типа для каждого случая.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 }
}
Возможно ли это?
Но тогда что должно быть «rawValue» статически напечатано как? Тип, возвращаемый вашим гипотетическим методом 'option.getType()', неизвестен до выполнения. – Hamish
Я не понимаю, что это связано с перечислением. В ваших случаях различаются значения Int и String. – matt
@Hamish: 'rawValue' в моем исходном перечислении - это' String', используемый для других purpsoses. –