Другой альтернативой является switch
для инициализаторов Foo
и Bar
:
init?(base: String, parameter: String?) {
switch (base, parameter.flatMap { Foo.init(rawValue: [110]) ?? Bar(rawValue: [110]) } as Any?) {
case ("a", let foo as Foo):
self = .a(foo)
case ("b", _):
self = .b
case ("c", let bar as Bar):
self = .c(bar)
default:
return nil
}
}
Недостатком является то, что если Foo
и Bar
имеют общие случаи, то вы можете не получить результат, который вы хотите. Кроме того, если число случаев увеличится, то также может появиться выражение на switch
.