加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 键入检查具有泛型类型的类

发布时间:2020-12-14 04:54:50 所属栏目:百科 来源:网络整理
导读:我有一个类SomeController A,其中A:ProtA 我有一些子类,如SubController:SomeController SubA 这是我如何尝试键入检查的工作示例: protocol SomeProtocol {}class SuperClassA where A: SomeProtocol {}class SubProtocol: SomeProtocol {}class SubClass
我有一个类SomeController< A,其中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"

从功能上来说,代码完全符合我的要求,但是,我留下了大量的警告说来自SuperClass< A>的Cast.到SubClass总是失败

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

解决方法

定义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")
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读