protocol Specification {
associatedtype T
func isSatisfied(item : T) -> Bool
}
protocol AndSpecification {
associatedtype T
var arrayOfSpecs : [Specification] {set}
}
上述代码给出以下错误
协议“规范”只能用作泛型约束
因为它有自己或相关的类型要求
我知道存在这个问题是因为关联的类型,如果添加where子句可以解决这个问题。但我不知道该在哪里以及如何使用这个where子句
最佳答案
您认为您需要一个where
子句,因为您希望数组包含的Specification
s都具有相同的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
。