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

时间:2017-05-29 19:26:56

标签: swift generics inheritance

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

Cannot convert DepositItemViewModel to return type TransactionItemViewModel

以下是我的课程声明:

class Deposit: Transaction 

class TransactionItemViewModel<T: Transaction>

class DepositItemViewModel: TransactionItemViewModel<Deposit>

1 个答案:

答案 0 :(得分:0)

使用协议

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>