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

标签 swift

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

相关文章:

ios - 根据segue设置段控索引

ios - 使用 Swift 在 iOS UI 中显示音乐 Unicode 符号

swift - Swift 将内容移到键盘后面不起作用

ios - 无法在 SpriteKit Swift 中使用 SKVideoNode 播放视频

swift - 从 Alamofire 获取返回的错误信息

ios - '&' used with non-inout argument of type ' AutoreleasingUnsafeMutablePointer<UIImage?>'

ios - Swift:如何在 2 个坐标之间平滑移动 GMSMarker

ios - 点击部分标题时如何将数据动态添加到 UITableView

swift - 淡入和淡出 SKLabelNode 的最佳方式

ios - 阴影未显示在 Collection View 中