swift - 泛型 : Same-type constraint type 'G' does not conform to required protocol 'Generator'

标签 swift

我正在开发一个 Generator 类,它包装了另一个 Generator 并在其之上提供了一些额外的功能。我几乎所有的东西都可以工作,除了一件事:一个方便的 init,它将一个序列作为参数并自动从中创建一个生成器。

这是导致错误的代码:

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()
    }
}

这是怎么回事?为什么 Swift 不喜欢我的约束?我觉得没问题。

是我做错了什么还是编译器错误?

最佳答案

这似乎是一个编译器错误,您可以通过将通用参数从生成器更改为元素并使用 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()
    }
}

关于swift - 泛型 : Same-type constraint type 'G' does not conform to required protocol 'Generator' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24643335/

相关文章:

ios - 呈现一个 View Controller ,关闭它并在 Swift 中呈现一个不同的 View Controller

ios - 使用保存/取消按钮创建模态视图

Swift 设置子类 UIView 的宽度和高度

ios - 使用取消和保存按钮操作将 Swift DatePicker 显示到 UIAlertController

ios - UIView.animate 未在 PHPhotoLibrary.shared().performChanges 中执行

ios - 根据输入从服务器端检索数据

ios - 使用自动布局支持不同 iPhone 尺寸的问题(包括图表)

ios - Swift 使用 GPUImage 发送压缩视频帧

ios - 搜索和表格 View

ios - UIButton 子类无法分配目标 - Swift 4