У меня есть перечисление что-то вроде ...
enum MyEnum {
case a(Foo)
case b
case c(Bar)
enum Foo: String {
case one
case two
}
enum Bar: String {
case three
case four
}
}
Я пытаюсь создать для этого функцию инициализатора с ошибкой, чтобы вы могли вызывать ее как ...
MyEnum(base: "a", parameter: "one")
или
MyEnum(base: "b", parameter: nil)
У меня это работает (но это неуклюже), как это ...
init?(base: String, parameter: String?) {
switch (base, parameter) {
case ("a", let p?) where Foo(rawValue: p) != nil:
self = .a(Foo(rawValue: p)!)
case ("b", _):
self = .b
case ("c", let p?) where Bar(rawValue: p) != nil:
self = .c(Bar(rawValue: p)!)
default:
return nil
}
}
Это включит base
и затем проверит, что следующее значение может быть создано перед вводом регистра.
Однако теперь я должен создать Foo
или Bar
дважды и принудительно развернуть второй.
Есть ли способ получить корпус переключателя для создания Foo
или Bar
и ввести регистр только в том случае, если он может быть создан, чтобы я мог просто использовать тот, который был создан, и не создавать второго один