Ho una classe come SomeController<A where A: ProtA>
Tipo controllo di una classe con i tipi generici
Ho alcune sottoclassi come SubController: SomeController<SubA>
Ecco un esempio di lavoro di come sto cercando di tipo controllare:
protocol SomeProtocol {
}
class SuperClass<A where A: SomeProtocol> {
}
class SubProtocol: SomeProtocol {
}
class SubClass: SuperClass<SubProtocol> {
}
func classTest<A where A: SomeProtocol>(classToTest: SuperClass<A>) {
switch classToTest {
case is SubClass: // Has warning 'Cast from SuperClass<A> to SubClass always fails'
print("I'm a SubClass")
default:
print("Wasn't found")
}
}
classTest(SubClass()) // Prints "I'm a SubClass"
Dal punto di vista funzionale, il codice fa esattamente quello che voglio, tuttavia, mi viene lasciato un sacco di avvertenze che dicono Cast from SuperClass<A> to SubClass always fails
Chiaramente i tipi sono correlati, e chiaramente il codice funziona bene e non 'fallisce sempre', quindi questo avvertimento sembra essere sbagliato. Si tratta di una limitazione corrente o di un caso limite del sistema dei tipi, oppure esiste un modo per far sparire l'avviso?
Quando si dà esempi di codice, aiuta il contesto completo, così possiamo più facilmente testare e giocare con lui – Alexander
@AMomchilov vuoi dire come con un parco giochi? Posso fornire un esempio che compila in un parco giochi e mostra l'avviso. –
@ trevor-e Sarebbe fantastico. –