Перегрузка оператора Xcode 10.1 swift 4.2 вызывает предупреждение компилятора: «Все пути через эту функцию будут вызываться сами собой» - PullRequest
0 голосов
/ 24 ноября 2018

Поэтому у меня неожиданно появилось это предупреждение компилятора, которого не было в swift 3 или (я думаю) swift 4.0.приведенный ниже код перегружает оператор + = для выполнения приращения вектора:

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

и выдает предупреждение. Я озадачен, может ли кто-нибудь пролить свет на то, почему выдается предупреждение и что не так?

1 Ответ

0 голосов
/ 24 ноября 2018

Когда вы делаете 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)
}
...