如何在协议中指定多个关联类型,并在内部关联类型上添加依赖关系?例如:
protocol CombinedType
{
typealias First: FirstType
typealias Second: SecondType
var first: First { get }
var second: Second { get }
}
protocol FirstType
{
typealias Value
var value: Value { get }
}
protocol SecondType
{
type alias Value
var value: Value { get }
}
我需要在 CombinedType 协议上指定一个限制,使其更像 FirstType.Value == SecondType.Value ,就像在中> 泛型中的strong>子句。
没有这个限制,代码:
func sum<Combined: CombinedType>(combined: Combined) -> Combined.FirstType.Value
{
return combined.first + combined.second
}
产生错误 Combined.FirstType.Value 与 Combined.SecondType.Value 不兼容。< / p>
但是如果我明确地将 where 子句添加到函数中,它就会编译:
func sum<Combined: CombinedType where Combined.FirstType.Value == Combined.SecondType.Value>(combined: Combined) -> Combined.FirstType.Value
{
return combined.first + combined.second
}
问题是这个哪里需要在任何地方复制,这会产生大量的样板,并且在另一个协议中使用 CombinedType 时会更糟糕,在这种情况下 where 子句变得越来越大。
我的问题是:我能以某种方式在协议本身中包含这种限制吗?