假设我正在编写处理多个帐户的社交媒体抓取工具(例如Facebook,Twitter等)
我为消息定义了一些协议(Timestamped
具有显示名称和消息正文,Forwarded
具有时间戳,protocol MessageSource : SequenceType {
associatedtype MessageType : Timestamped
func messages (since : NSDate) -> Generator
}
具有原始消息ID等。
然后我定义了一个消息来源的协议,我目前正在编写
n
我的想法是,我可以通过撰写msgSource.take(n)
来获取d
最新消息,并通过撰写msgSource.messages(since : d)
Generator.Element
日期以来的所有消息
我的问题是,如何将从SequenceType
继承的MessageType
约束为与Enumerable
相同,因此两个生成器都保证返回相同的类型。
答案 0 :(得分:1)
默认情况下,您可以实现类似的功能:
protocol MessageSource: SequenceType {
func messages (since : NSDate) -> Generator
}
extension MessageSource where Generator.Element: Timestamped {
typealias MessageType = Generator.Element
func foo() -> MessageType? {
...
}
}