繁体   English   中英

泛型:相同类型约束类型'G'不符合所需协议'生成器'

[英]Generics: Same-type constraint type 'G' does not conform to required protocol 'Generator'

我正在开发一个包含另一个Generator的Generator类,并在它上面提供一些额外的功能。 除了一件事之外,我已经完成了所有工作:一个方便的init,它将Sequence作为参数并自动从中创建一个生成器。

这是导致错误的代码:

class MyGenerator<G: Generator>: Generator {
    typealias Element = G.Element

    var generator: G

    init (_ generator: G) {
        self.generator = generator
    }

    // ERROR: Same-type constraint type 'G' does not conform to 
    // required protocol 'Generator'
    convenience init<S: Sequence where S.GeneratorType == G>(sequence: S) {
        self.init(sequence.generate())
    }

    // [...]

    func next() -> Element? {
        return generator.next()
    }
}

这里发生了什么? 为什么斯威夫特不喜欢我的约束? 它看起来不错。

我做错了什么或这是编译错误?

它似乎是一个编译器错误,您可以通过将泛型参数从generator更改为element并使用GeneratorOf<T>进行额外的间接级别来解决它:

class MyGenerator<T>: Generator {
    typealias Element = T

    var generator: GeneratorOf<T>

    init<G: Generator where G.Element == T>(_ generator: G) {
        self.generator = GeneratorOf(generator)
    }

    convenience init<S: Sequence where S.GeneratorType.Element == T>(sequence: S) {
        self.init(sequence.generate())
    }

    // [...]

    func next() -> Element? {
        return generator.next()
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM