protocol Specification {
associatedtype T
func isSatisfied(item : T) -> Bool
}
protocol AndSpecification {
associatedtype T
var arrayOfSpecs : [Specification] {set}
}
上述代码给出了以下错误
Protocol 'Specification' can only be used as a generic constraint because it has Self or associated type requirements
我理解是关联类型有这个问题,加个where子句就可以解决。但是我不知道应该在哪里以及如何使用这个 where 子句
最佳答案
您认为您需要一个 where
子句,因为您希望数组包含具有相同 T
的 Specification
,对吗?好吧,具有关联类型的协议(protocol)也不能做到这一点!
您可以做的是让数组包含所有相同类型的规范:
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
。
关于swift - 如何解决 Swift 协议(protocol)的规范问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58871872/