我想知道是否可以在一类中具有多个Equatable函数。我当前的问题来自此示例:
class Ingredient: Equatable {
static func == (lhs: Ingredient, rhs: Ingredient) -> Bool {
return lhs.ingredientId == rhs.ingredientId && lhs.price == rhs.price
}
// static func == (lhs: Ingredient, rhs: Ingredient) -> Bool {
// return lhs.ingredientId == rhs.ingredientId && lhs.price == rhs.price && lhs.quantity == rhs.quantity
// }
}
如您所见,我想对相等函数进行注释,但是这种方法无法正常工作,因为我已经拥有一个。我需要两个功能一起工作。有什么最佳解决方案吗?
答案 0 :(得分:2)
不,你不能。
根据函数的数学定义:
函数是将集合X的每个元素x(函数的域)与另一个集合Y(可能是同一集合)的单个元素y相关联的过程或关系,函数的共域。
通常,通过定义多个使用相同名称的函数,这些函数需要相同类型的参数,您会产生歧义,从而导致无法预测的结果。因此,此行为将生成编译时错误。
答案 1 :(得分:1)
您不能对==()
函数(使您符合等价协议的函数)有多个定义,但是可以编写使用更复杂逻辑的==()
函数的复杂实现决定如何比较两个对象。您甚至可以在类中添加一个类变量,并让==()
函数在确定如何比较值时使用该变量,尽管这似乎是不好的设计。