gpt4 book ai didi

swift - 类型检查具有泛型类型的类

转载 作者:搜寻专家 更新时间:2023-10-31 08:08:08 27 4
gpt4 key购买 nike

我有一个类 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

很明显,类型是相关的,并且代码运行良好并且不会“总是失败”,所以这个警告似乎是错误的。这是类型系统的当前限制或边缘情况,还是有办法让警告消失?

最佳答案

将 SuperClass 定义为它自己的泛型会抑制警告。我也不认为您需要 where 子句来指定 A 符合 SomeProtocol。

func classTest<A:SomeProtocol, B:SuperClass<A>>(classToTest: B, useA: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")
}
}

关于swift - 类型检查具有泛型类型的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38232904/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com