protocol Specification {
    associatedtype T
    func isSatisfied(item : T) -> Bool
}

protocol AndSpecification {
    associatedtype T
    var arrayOfSpecs : [Specification] {set}
}

上述代码给出以下错误
协议“规范”只能用作泛型约束
因为它有自己或相关的类型要求
我知道存在这个问题是因为关联的类型,如果添加where子句可以解决这个问题。但我不知道该在哪里以及如何使用这个where子句

最佳答案

您认为您需要一个where子句,因为您希望数组包含的Specifications都具有相同的T,对吗?好吧,有关联类型的协议也不能这么做!
您可以做的是让数组包含所有相同类型的规范:

protocol AndSpecification {
    associatedtype SpecificationType : Specification
    var arrayOfSpecs : [SpecificationType] { get }
}

如果您真的喜欢T关联的类型,可以添加一个:
protocol AndSpecification {
    associatedtype T
    associatedtype SpecificationType : Specification where SpecificationType.T == T
    var arrayOfSpecs : [SpecificationType] { get }
}

但这是相当多余的,因为您可以直接说AndSpecification.SpecificationType.T

10-08 05:30