2017-05-29 73 views
2

我试图返回一个特殊类型的TransactionItemViewModelDepositItemViewModel,但我得到一个编译错误:无法转换DepositItemViewModel返回类型TransactionItemViewModel斯威夫特不接受通用专业化为返回类型

Cannot convert DepositItemViewModel to return type TransactionItemViewModel

这里是我的班宣言:用

class Deposit: Transaction 

class TransactionItemViewModel<T: Transaction> 

class DepositItemViewModel: TransactionItemViewModel<Deposit> 
+1

https://developer.apple .com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/GenericParametersAndArguments.html –

+1

'TransactionItemViewModel '不是'TransactionItemViewModel '。比较[Swift通用强制误解](https://stackoverflow.com/q/41976844/2976878)&[如何将类型Class 的值存储在类型为\ [String:Class \]的Dictionary中斯威夫特?](https://stackoverflow.com/q/38590548/2976878) – Hamish

回答

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>