Swift

Swift 4.1 - SE-0185 Synthesizing

2020-12-11  本文已影响0人  ienos

遵循 Equatable 和 Hashable,减少 == 和 hashValue 重复代码编写


在该特性之前,Equatable 需要手动实现 == 运算符,然后对所有成员进行等价判断。而且当我们每添加增加、删除或修改一个属性时,就需要手动更新该方法,不易维护而且容易出错

struct Person: Equatable {
  static func == (lhs: Person, rhs: Person) -> Bool {
    return lhs.firstName == rhs.firstName &&
           lhs.lastName == rhs.lastName &&
           lhs.birthDate == rhs.birthDate &&
           ...
  }
}

此特性中,类型可以通过遵循 Equatable 或 Hashable 但是不实现任何代码,编译器将自动为该类型生成 ==/hashValue 的实现

自动生成协议方法的条件

1. Enum
2. Struct

如果需要忽略某个属性的相等性判断,需要将重写 == 和 hashValue 方法

目前暂时不对 tuples 和 class 类型支持

上一篇 下一篇

猜你喜欢

热点阅读