swift – 如何约束扩展SequenceType的协议中的Generator.Element类型

假设我正在编写处理多个帐户的社交媒体抓取工具(例如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? {
        ...
    }
}
点赞