尝试实现类型化集合

时间:2016-12-23 06:01:41

标签: ios swift collections

我有一些数据要包含在集合中。数据来自两个使用两种不同技术的不同来源,所以我试图实现两个可以符合通用协议的结构。我想返回一个看起来像这样的类型:

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。真的很难!

我已经完成了大量的阅读,但我真的不确定如何解决这个问题。

0 个答案:

没有答案