为了澄清我的要求,请考虑以下示例:
protocol Food {}
protocol Meat: Food {}
protocol Animal {
associatedtype Food
func eat(food: Food)
}
protocol Funny {}
struct Cat: Animal {
func eat(food: Meat) {
print("Mewo!")
}
}
我要做的是将具有特定条件的其他动物与Cat
进行比较;假设我们要声明一个比较猫的函数: funny animal (将T
与约束进行比较:它必须符合两个协议),方法签名将声明为-in Cat
结构 - :
func compareWithFunnyAnimal<T: Animal & Funny>(animal: T) {}
它工作正常,但如果我想将猫与必须吃Meat
的动物进行比较(基于T
相关类型(Food
进行比较)会怎么样?我试着做-in Cat
结构 - :
// animal must eat Meat
func compareWithAnimal<T: Animal & T.Food == Meat>(animal: T) {}
但显而易见 - 它不起作用。
对于泛型参数关联类型,如何进行这样的比较?是否需要添加多个通用参数?
答案 0 :(得分:2)
您应该使用通用where
子句来检查T.Food
是否为Meat
类型。
func compareWithAnimal<T: Animal>(animal: T) where T.Food == Meat {
}