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