我有一些数据要包含在集合中。数据来自两个使用两种不同技术的不同来源,所以我试图实现两个可以符合通用协议的结构。我想返回一个看起来像这样的类型:
Collection<Media>
但Collection
不是通用的。我有两个数据源,因此需要实现Collection
但需要通过单个方法返回的两个类。
我的问题是我想返回一个类型,它可以代表两个实现中的任何一个,调用代码将理解它代表Media
。
我尝试过构建这样的协议:
protocol MediaCollection:Collection {
subscript(i:Int) -> Media { get }
}
但是我遇到了并发症错误,因为Collection
中的代码引用了Self
而Swift并不是这样。告诉我,MediaCollection
不能用作通用约束,因为它具有Self
或相关的类型要求。
我还发现如果我做这样的事情:
class MediaConnection:Collection {
var startIndex:Int {...}
var endIndex:Int {...}
func index(after i:Int) -> Int {...}
subscript(i:Int) -> Media {...}
}
它将编译MediaCollection
类,但当我尝试将Collection
用作方法签名中的类型时,我会遇到同样的问题。
我现在想的唯一选择是创建AbstractMediaCollection
课程。然后在我的方法签名中创建MediaCollection:AbstractMediaCollection
并使用AbstractMediaCollection
。真的很难!
我已经完成了大量的阅读,但我真的不确定如何解决这个问题。