假设我正在编写处理多个帐户的社交媒体抓取工具(例如Facebook,Twitter等) 我为消息定义了一些协议(消息具有显示名称和消息体,Timestamped具有时间戳,Forwarded具有原始消息ID等). 然后我定义
我为消息定义了一些协议(消息具有显示名称和消息体,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? { ... } }