Swift 不接受泛型特化作为返回类型

标签 swift generics inheritance

我正在尝试返回 TransactionItemViewModel 的专用类型 DepositItemViewModel 但出现编译错误:无法将 DepositItemViewModel 转换为返回类型 TransactionItemViewModel .

Cannot convert DepositItemViewModel to return type TransactionItemViewModel

这是我的类声明:

class Deposit: Transaction 

class TransactionItemViewModel<T: Transaction>

class DepositItemViewModel: TransactionItemViewModel<Deposit>

最佳答案

使用协议(protocol)

protocol P{}
class A: P{}
class B<T: P>{}
class C:B<A>{}


func f(o: AnyObject)->B<P> {
    return C()
}

给你

error: using 'P' as a concrete type conforming to protocol 'P' is not supported

使用类

class P{}
class A: P{}
class B<T: P>{}
class C:B<A>{}


func f(o: AnyObject)->B<P> {
    return C()
}

给你

error: cannot convert return expression of type 'C' to return type 'B<P>'

两种情况下的返回类型都必须是 B<A>

在您的情况下,您必须将返回类型更改为 TransactionItemViewModel<Deposit>

关于Swift 不接受泛型特化作为返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44249307/

相关文章:

c++ - 公共(public)/ protected /私有(private)继承的问题

javascript - 如何使用 JavaScript 更改 UIWebView 字体?

ios - 使用 JSONDecoder Swift 解码

android - 具有Generic的Kotlin扩展功能不适用于Any吗?

java - 无法在子类中解析泛型类型变量

javascript - 除非设置为可写,否则无法覆盖 readOnly 可配置函数值对象原型(prototype)属性

javascript - 如何在 Javascript 中使用对此的新引用调用父定义的 block

ios - 代码在 AppDelegate 中工作,但不在任何其他类中工作

swift - 带有 NSFetchedResultsController 的 TableView 闪烁得太多

c# - 泛型确保 T 属于指定的 N 个类中的任何一个