首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift泛型类同时键入子类和符合协议。

Swift泛型类同时键入子类和符合协议。
EN

Stack Overflow用户
提问于 2014-09-25 17:57:06
回答 2查看 1.6K关注 0票数 3

我试图用Swift编写一个泛型类,它的泛型类型既继承类又符合协议。但是,以下代码会导致编译器崩溃,导致分段错误: 11。

代码语言:javascript
复制
protocol Protocol {
    var protocolProperty: Any? { get }
}

class Class {
    var classProperty: Any?
}

class GenericClass<T: Class where T: Protocol> {

    var genericProperty: T?

    func foo() {
        let classProperty: Any? = genericProperty!.classProperty
        // This is the culprit
        let protocolProperty: Any? = genericProperty!.protocolProperty
    }

}

注释掉对协议属性的访问允许程序编译。如果没有编译器崩溃,就无法访问协议中的任何内容。创建像这样工作的泛型类有解决办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-25 20:09:20

正如MikeS所指出的那样,你应该打开一个雷达,以应对坠机事件。它不应该坠毁。

但是,解决方案是将重点放在实际需要T来遵守的协议(即方法列表)上,而不是在类中完成。例如:

代码语言:javascript
复制
protocol WhatGenericClassHolds : Protocol {
  var classProperty: Any? { get }
}

class GenericClass<T: WhatGenericClassHolds> { ... }
票数 2
EN

Stack Overflow用户

发布于 2014-09-25 20:27:33

你的声明有个问题。使类与协议一致,如下所示

代码语言:javascript
复制
protocol A {
    var somePropertyInt : Int? {get }
}

class B:A {
    var someProperty : String? 
    var somePropertyInt:Int?;
}


class GenericClass<T: B where T: A  > {
    var someGenericProperty : T?

    func foo() {
         println(someGenericProperty!.someProperty)
         println(someGenericProperty!.somePropertyInt)   
    }
}


var someGen = GenericClass()

 someGen.someGenericProperty?.somePropertyInt
 someGen.someGenericProperty?.someProperty
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26045077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档