一类具有多个等值函数

时间:2018-11-11 14:45:48

标签: swift

我想知道是否可以在一类中具有多个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
//    }
}

如您所见,我想对相等函数进行注释,但是这种方法无法正常工作,因为我已经拥有一个。我需要两个功能一起工作。有什么最佳解决方案吗?

2 个答案:

答案 0 :(得分:2)

不,你不能。

根据函数的数学定义:

  

函数是将集合X的每个元素x(函数的域)与另一个集合Y(可能是同一集合)的单个元素y相关联的过程或关系,函数的共域。

通常,通过定义多个使用相同名称的函数,这些函数需要相同类型的参数,您会产生歧义,从而导致无法预测的结果。因此,此行为将生成编译时错误。

答案 1 :(得分:1)

您不能对==()函数(使您符合等价协议的函数)有多个定义,但是可以编写使用更复杂逻辑的==()函数的复杂实现决定如何比较两个对象。您甚至可以在类中添加一个类变量,并让==()函数在确定如何比较值时使用该变量,尽管这似乎是不好的设计。