Xcode 10.1 swift 4.2运算符重载导致编译器警告:“通过此函数的所有路径都将自行调用”

时间:2018-11-24 05:51:11

标签: swift swift4.2

所以我突然收到在Swift 3或(我认为)Swift 4.0上不存在的此编译器警告。 下面的代码使+ =运算符重载以执行矢量增量:

CardView

并发出警告,我感到困惑的是,有人能阐明为什么会引发警告以及出了什么问题吗?

1 个答案:

答案 0 :(得分:1)

当您执行left += right时,它将调用您定义的相同函数。换句话说,运算符重载函数+= ( left: inout CGVector, right: CGVector)会一直调用自身(无限递归)。你正在做类似

的事情
func foo(String: bar) {
    foo(bar)
}

但是仅将foo替换为+=是不合理的。 Xcode现在只给您一个警告,这不是一个使您无法编译的错误。您过去可能已经写错了此函数(但警告它刚刚添加到编译器中的警告)。

您可能想要这样的东西

public func += ( left:  inout CGVector, right: CGVector) {
     left = CGVector(dx: left.dx + right.dx, dy: left.dy + right.dy)
}