如何在扩展 SequenceType 的协议中限制 Generator.Element 的类型
How to constrain the type of Generator.Element in a Protocol extending SequenceType
假设我正在编写处理多个帐户(例如 Facebook、Twitter 等)的社交媒体爬虫
我为消息定义了一些协议(Message
有显示名称和消息正文,Timestamped
有时间戳,Forwarded
有原始消息 ID 等)。
然后我为消息源定义一个协议,我目前已经编写了该协议
protocol MessageSource : SequenceType {
associatedtype MessageType : Timestamped
func messages (since : NSDate) -> Generator
}
我的想法是,我可以通过写入 msgSource.take(n)
来获取 n
最近的消息,并通过写入 msgSource.messages(since : d)
[=22= 来获取自日期 d
以来的所有消息]
我的问题是,我如何限制从 SequenceType
继承的 Generator.Element
与 MessageType
相同,从而保证两个生成器的 return 类型相同.
您可以通过默认实现协议来实现类似的功能:
protocol MessageSource: SequenceType {
func messages (since : NSDate) -> Generator
}
extension MessageSource where Generator.Element: Timestamped {
typealias MessageType = Generator.Element
func foo() -> MessageType? {
...
}
}
假设我正在编写处理多个帐户(例如 Facebook、Twitter 等)的社交媒体爬虫
我为消息定义了一些协议(Message
有显示名称和消息正文,Timestamped
有时间戳,Forwarded
有原始消息 ID 等)。
然后我为消息源定义一个协议,我目前已经编写了该协议
protocol MessageSource : SequenceType {
associatedtype MessageType : Timestamped
func messages (since : NSDate) -> Generator
}
我的想法是,我可以通过写入 msgSource.take(n)
来获取 n
最近的消息,并通过写入 msgSource.messages(since : d)
[=22= 来获取自日期 d
以来的所有消息]
我的问题是,我如何限制从 SequenceType
继承的 Generator.Element
与 MessageType
相同,从而保证两个生成器的 return 类型相同.
您可以通过默认实现协议来实现类似的功能:
protocol MessageSource: SequenceType {
func messages (since : NSDate) -> Generator
}
extension MessageSource where Generator.Element: Timestamped {
typealias MessageType = Generator.Element
func foo() -> MessageType? {
...
}
}