Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 10.1 swift 4.2运算符重载导致编译器警告;通过此函数的所有路径都将调用自身;_Swift_Swift4.2 - Fatal编程技术网

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

Xcode 10.1 swift 4.2运算符重载导致编译器警告;通过此函数的所有路径都将调用自身;,swift,swift4.2,Swift,Swift4.2,所以我突然有了这个编译器警告,它在swift 3或(我想)swift 4.0上是不存在的。 下面的代码重载+=运算符以执行向量增量: public func += ( left: inout CGVector, right: CGVector) { left += right } 并生成警告,我很困惑,有人能解释为什么会抛出警告以及错误是什么吗?当您执行left+=right时,它调用的函数与您定义的函数相同。换句话说,运算符重载函数+=(左:inout CGVector,右:CGVec

所以我突然有了这个编译器警告,它在swift 3或(我想)swift 4.0上是不存在的。 下面的代码重载+=运算符以执行向量增量:

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

并生成警告,我很困惑,有人能解释为什么会抛出警告以及错误是什么吗?

当您执行
left+=right
时,它调用的函数与您定义的函数相同。换句话说,运算符重载函数
+=(左:inout CGVector,右: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)
}

我不知道斯威夫特,但这里你似乎超载+=,然后立即调用它。因此,堆栈跟踪应该如下所示:+=(a,b)->+=(a,b)->+=(a,b)…您只是在调用重载函数“+=”本身。我想用
left=left+right
替换
left=left+right
可以解决问题。有时候,即使答案就在你眼前,你也看不见。谢谢,现在我明白了。