2015-06-05 9 views
2

Я получаю нечетную ошибку, указывающую, что двоичный оператор '-' не может применяться к двум операндам CGPoint в моей новой версии приложения, которое я разрабатываю. Это очень сложно, поскольку я знаю, что он может применяться, поскольку я использовал ту же строку кода в предыдущей сборке этого приложения. Я попытался разрешить ошибку, переписав проект и получив ту же проблему. Строка кода, которая вызывает проблемы как таковой:Проблема с двоичным оператором '-'

func updateRKnobWithPosition(position:CGPoint) { 
     var positionToCenter = position - baseCenter 
     var direction: CGPoint 

     if positionToCenter == CGPointZero { 
      direction = CGPointZero 
     } else { 
      direction = positionTOCenter.normalized() 
     } 

...

delegate?.analogRControlPositionChanged(self, position: relativePosition) 
     } 

где relativePosition является CGPoint в классе.

Может ли кто-нибудь сказать мне, где я ошибаюсь. Если это не мой код, это имеет какое-то отношение к Xcode?

Благодаря

ответ

1

Ваша проблема может быть быстро объяснить, глядя на документацию для CGPoint. Она определяется как:

struct CGPoint { var x: CGFloat var y: CGFloat init() init(x x: CGFloat, y y: CGFloat) } 

Итак, вы просите его вычесть одну структуру из другого, и это не имеет ни малейшего представления о том, как это сделать. :)

Проблема в том, что большая часть того, что вы делаете в iOS и Mac, является объектно-ориентированной, но графическая библиотека, в основном, скорее является кодом C, а не объектами с перегруженными операторами. :)

3

Возможно, вы раньше не использовали его правильно. Но если вы твердо уверены, что это действительно работает правильно, прежде чем, то, возможно, кто-то или какой-либо библиотеки имели функцию оператора, работая на CGPoint

Вы можете создать операторную функцию следующим образом

func - (first: CGPoint, second: CGPoint) -> CGPoint { 
return CGPointMake(first.x - second.x, first.y - second.y) 
} 
+2

Если вы не работаете на Obfuscated Swift Code Contest, вы должны называть этот оператор '-', а не' + ':) –

+0

@MartinR вскрытая ромашка. Исправлено и обновлено. Приветствия. –

+1

Существует библиотека функций оператора, которая содержит все операторы, необходимые для правильной работы аналогового управления, что также было включено в предыдущую сборку. Когда я пытаюсь выполнить решение, которое вы предоставили iosDev82, я получаю ошибки компилятора: ожидаемое объявление (в строке func), операторы разрешены только в глобальной области, а последовательные объявления в строке должны быть разделены символом ';'. –

Смежные вопросы