假设我正在编写一个处理多个帐户(例如 Facebook、Twitter 等)的社交媒体爬虫
我为消息定义了一些协议(protocol)(Message
具有显示名称和消息正文,Timestamped
具有时间戳,Forwarded
具有原始消息 ID 等)。
然后我为消息源定义了一个协议(protocol),我目前已经编写了这个协议(protocol)
protocol MessageSource : SequenceType {
associatedtype MessageType : Timestamped
func messages (since : NSDate) -> Generator
}
这个想法是我可以通过编写
n
来获取 msgSource.take(n)
最近的消息,并通过编写 d
来获取自日期 msgSource.messages(since : d)
以来的所有消息我的问题是,如何限制从
Generator.Element
继承的 SequenceType
与 MessageType
相同,以便保证两个生成器都返回相同的类型。 最佳答案
您可以通过协议(protocol)的默认实现来实现类似的功能:
protocol MessageSource: SequenceType {
func messages (since : NSDate) -> Generator
}
extension MessageSource where Generator.Element: Timestamped {
typealias MessageType = Generator.Element
func foo() -> MessageType? {
...
}
}
关于swift - 如何在扩展 SequenceType 的协议(protocol)中约束 Generator.Element 的类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37502139/