我有一个协议,在其中定义了一个函数,函数的返回类型是SuperclassType
。
在一个遵循该协议的类中,我尝试定义这个函数,但是返回类型是SubclassType
。
编译器告诉我,这个类未遵循该协议,因为显然SubclassType
!= SuperclassType
。
protocol SomeProtocol {
func someFunction(someParameter:SomeType) -> SuperclassType?
}
class SomeClass : SomeProtocol {
func someFunction(someParameter:SomeType) -> SubclassType? {
...
}
}
class SubclassType : SuperclassType { }
常识告诉我,SubclassType
应该是在这个问题中可以替代SuperclassType
的合适选择。
我做错了什么?
谢谢。
associatedtype
会大大限制您可以使用协议的方式(这让我非常恼火)- 它被禁止用作函数参数类型、泛型参数类型、变量类型,您不能从函数中返回它,也不能创建一个数组。可能还有其他大部分情况也是如此。 - Erhannis