【问题标题】:Swift not accepting generic specialization as return typeSwift 不接受泛型特化作为返回类型
【发布时间】:2017-05-29 19:26:56
【问题描述】:

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

Cannot convert DepositItemViewModel to return type TransactionItemViewModel

这是我的类声明:

class Deposit: Transaction 

class TransactionItemViewModel<T: Transaction>

class DepositItemViewModel: TransactionItemViewModel<Deposit>

【问题讨论】:

标签: swift generics inheritance


【解决方案1】:

使用协议

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&lt;A&gt;

在您的情况下,您必须将返回类型更改为 TransactionItemViewModel&lt;Deposit&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 2015-07-18
    • 2015-08-18
    • 2016-11-13
    • 1970-01-01
    相关资源
    最近更新 更多