我正在尝试使用通用函数进行协议操作,其中T不仅等于类型本身,而且扩展了它。
class MainItem {}
class Item1: MainItem {}
class Item2: MainItem {}
protocol MyProtocol {
func myFunc<T: MainItem>() -> T // T extends MainItem
}
class ClassA: MyProtocol {
func myFunc() -> Item1 { // not MainItem
return Item1()
}
}
class ClassB: MyProtocol {
func myFunc() -> Item2 { // not MainItem
return Item2()
}
}
但是我遇到了这个错误:
类型'ClassA'不符合协议'MyProtocol'
因为Item1
不等于MainItem
(它会展开)。如何使其正常工作?
例如,在Java中,所有内容都可以使用抽象类完成:
abstract class MyProtocol {
abstract <T extends MainItem> T myFunc()
}