protocol Specification {
associatedtype T
func isSatisfied(item : T) -> Bool
}
protocol AndSpecification {
associatedtype T
var arrayOfSpecs : [Specification] {set}
}
上述代码给出以下错误
协议"规范"只能用作通用约束因为它有自身或相关类型的要求
我知道存在这个问题是因为关联类型,如果我添加where子句,就可以解决这个问题。但我不知道在哪里以及如何使用条款
您认为需要一个where
子句,因为您希望数组包含具有相同T
的Specification
,对吗?好吧,具有关联类型的协议也不能做到这一点!
你可以做的是让数组包含相同类型的规范:
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
。