协议扩展后定义的功能?
Functions defined after protocol extension?
当我在看 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
}
}
没有。运算符函数始终在全局 space 中,而不是在 class 或扩展中。
尝试第二个版本时出现的两个问题:
- 运算符只允许在全局范围内使用
- 扩展不符合 Equatable 因为 1.
换句话说,不,你不能根据运算符声明的范围来做。
当我在看 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
}
}
没有。运算符函数始终在全局 space 中,而不是在 class 或扩展中。
尝试第二个版本时出现的两个问题:
- 运算符只允许在全局范围内使用
- 扩展不符合 Equatable 因为 1.
换句话说,不,你不能根据运算符声明的范围来做。