协议扩展后定义的函数?

时间:2015-06-24 06:57:09

标签: ios xcode swift oop protocols

当我在观看2场WWDC 2015讲座时,他们提到了以下代码:

func == (lhs: Polygon, rhs: Polygon) -> Bool {
  return lhs.corners == rhs.corners
}
extension Polygon : Equatable {}
func == (lhs: Circle, rhs: Circle) -> Bool {
  return lhs.center == rhs.center
    && lhs.radius == rhs.radius
}
extension Circle : Equatable {}

不应该将equatable函数声明放在扩展中吗?现在,他们在外面并且存在于哪里?换句话说,它不应该是这样的吗?

extension Polygon : Equatable {
    func == (lhs: Polygon, rhs: Polygon) -> Bool {
      return lhs.corners == rhs.corners
    }
}

extension Circle : Equatable {
    func == (lhs: Circle, rhs: Circle) -> Bool {
       return lhs.center == rhs.center
       && lhs.radius == rhs.radius
    }
 }

2 个答案:

答案 0 :(得分:2)

没有。运算符函数始终位于全局空间中,而不是在类或扩展中。

答案 1 :(得分:2)

尝试第二个版本时有两个问题:

  1. 仅在全球范围内允许运营商
  2. 由于1,扩展名不符合Equatable。
  3. 换句话说,不,你不能根据运营商声明的范围来做。