假设我正在编写一个处理多个帐户(例如 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 继承的 SequenceTypeMessageType 相同,以便保证两个生成器都返回相同的类型。

最佳答案

您可以通过协议(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/

10-17 01:10