返回具有特定元类型的对象,一般是元类型函数

时间:2016-05-25 09:10:00

标签: swift generics inheritance swift2 metatype

我在继承和泛型类方面存在一些问题。我想在一个函数中返回子类的对象(具有特定的泛型类型),该函数返回具有通用元类型的父类的对象。

或多或少,我有这种类和函数的结构:

class Element {}
class Item:Element {}

class A<aType:Element> { }
class B:A<Item> { }

class SomeClass {
    func foo() -> A<Element> {
        return A<Element>()
    }
}
class OtheClass:SomeClass {
    override func foo() -> A<Element> {
        return B() // An error where!
    }
}

我在其他类的foo函数中无法做return B()。错误是:

  

无法转换类型&#39; B&#39;的返回表达式返回类型   &#39; A&LT;元素&gt;&#39;

有什么办法吗?

1 个答案:

答案 0 :(得分:0)

我找到的解决方案是:

class CoreElement {}
class CoreItem:CoreElement {}

class CoreA<aType:CoreElement> { }
class CoreB:CoreA<CoreItem> { }

class CoreSomeClass<T:CoreElement> {
    func foo() -> CoreA<T> {
        return CoreA<T>()
    }
}
class CoreOtherClass:CoreSomeClass<CoreItem> {
    override func foo() -> CoreA<CoreItem> {
        return CoreB()
    }
}