我有一類像SomeController<A where A: ProtA>
類型檢查與泛型類
我有一些子類像SubController: SomeController<SubA>
這裏是我怎麼想鍵入檢查工作示例:
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"
從功能上來說,代碼確實是我想要的,但是,我留下了大量的警告說Cast from SuperClass<A> to SubClass always fails
顯然類型是相關的,顯然代碼運行良好,並不總是失敗,所以這個警告似乎是錯誤的。這是類型系統的當前限制還是邊緣情況,還是有辦法使警告消失?
當你給的代碼示例,它有助於完整的上下文,所以我們可以更容易地測試它並使用它 – Alexander
@AMomchilov你的意思是像一個遊樂場?我可以提供一個在Playground中編譯並顯示警告的示例。 –
@ trevor-e那太棒了。 –