Qui ci sono un paio aggiuntivo richiede che possono aiutare qualcuno là fuori:
Usando il tuo esempio:
enum Foo {
case bar(baz: String)
case baz(bar: String)
}
È possibile considerare r per "nido" in un case
della propria enum
:
enum FooExtended {
case foo(Foo) // <-- Here will live your instances of `Foo`
case fuzz(Int)
}
Con questa soluzione, diventa più laboriosa per accedere alla casi "nascosti" tipo associato. Ma questa semplificazione potrebbe effettivamente essere utile in alcune applicazioni.
Altri passaggi alternativi per appena ricreare ed estenderlo pur avendo un modo per convertire Foo
nella esteso enum
FooExtended
(ad esempio con un costume init
.):
enum FooExtended {
case bar(baz: String)
case baz(bar: String)
case fuzz(Int)
init(withFoo foo: Foo) {
switch foo {
case .bar(let baz):
self = .bar(baz: baz)
case .baz(let bar):
self = .baz(bar: bar)
}
}
}
Ci possono essere molti posti in cui uno, il altro, o entrambe queste soluzioni non hanno assolutamente senso, ma sono abbastanza sicuro che possano essere utili a qualcuno là fuori (anche se solo come esercizio).