代码之家  ›  专栏  ›  技术社区  ›  SuryaKantSharma

错误:类型不能将自身引用为需求associatedtype后缀:SupplexableContainer where后缀。项目==项目

  •  0
  • SuryaKantSharma  · 技术社区  · 8 年前

    当我在操场xcode 9.2上运行时,上面的错误出现在apple文档代码中 https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Generics.html

    部分:使用类型注释约束关联的类型

    protocol Container {
        associatedtype Item: Equatable
        mutating func append(_ item: Item)
        var count: Int { get }
        subscript(i: Int) -> Item { get }
    }
    protocol SuffixableContainer: Container {
        associatedtype Suffix: SuffixableContainer where Suffix.Item == Item
        func suffix(_ size: Int) -> Suffix
    }
    

    他们的解释:在这个协议中,后缀是一个关联的类型,就像上面容器示例中的项目类型一样。后缀有两个约束:它必须符合后缀容器协议(当前定义的协议),并且其项类型必须与容器项类型相同。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Community Mohan Dere    5 年前
    protocol SuffixableContainer: Container {
        associatedtype Suffix: SuffixableContainer
        // ...
    }
    

    对关联的类型使用递归约束:关联的 类型 Suffix 受限于封闭协议 SuffixableContainer

    Swift 4.1中实现了关联类型的递归约束,即该代码需要Xcode 9.3(目前处于beta版)。

    Swift CHANGELOG :

    Swift 4.1

    。。。

    SE-0157 已实现。关联类型现在可以声明“递归”约束,这要求关联类型符合封闭协议。