Подтвердить что ты не робот

"Выражение не присваивается" - проблема, присваивающая число с плавающей точкой как сумма двух других значений с плавающей точкой в XCode?

В приложении для фортепиано я назначаю координаты черных клавиш. Вот строка кода, вызывающая ошибку.

'blackKey' и 'whiteKey' являются как customViews

blackKey.center.x = (whiteKey.frame.origin.x + whiteKey.frame.size.width);
4b9b3361

Ответ 1

Другие ответы не совсем объясняют, что происходит здесь, поэтому это основная проблема:

Когда вы пишете blackKey.center.x, blackKey.center и center.x оба выглядят как доступ к элементам структуры, но на самом деле они совершенно разные вещи. blackKey.center - это доступ к свойствам, который desugars для чего-то вроде [blackKey center], который в свою очередь desugars к чему-то вроде objc_msgSend(blackKey, @selector(center)). Вы не можете изменить возвращаемое значение функции, например objc_msgSend(blackKey, @selector(center)).x = 2 - это просто не имеет смысла, потому что возвращаемое значение не сохраняется в любом месте значимым.

Итак, если вы хотите изменить структуру, вы должны сохранить возвращаемое значение свойства в переменной, изменить переменную, а затем установить свойство в новое значение.

Ответ 2

Вы не можете напрямую изменить значение x a CGPoint (или любое значение struct), подобное этому, если оно является свойством объекта. Сделайте что-то вроде следующего.

CGPoint _center = blackKey.center;
_center.x =  (whiteKey.frame.origin.x + whiteKey.frame.size.width);
blackKey.center = _center;

Ответ 3

blackKey.center = CGPointMake ( whiteKey.frame.origin.x + whiteKey.frame.size.width, blackKey.center.y);

Один из способов сделать это.

Ответ 4

Один вариант использования макросов:

#define CGPOINT_SETX(point, x_value) { \
    CGPoint tempPoint = point;         \
    tempPoint.x = (x_value);           \
    point = tempPoint;                 \
}

#define CGPOINT_SETY(point, y_value) { \
    CGPoint tempPoint = point;         \
    tempPoint.y = (y_value);           \
    point = tempPoint;                 \
}

CGPOINT_SETX(blackKey.center, whiteKey.frame.origin.x + whiteKey.frame.size.width);

или немного проще:

CGPOINT_SETX(blackKey.center, CGRectGetMaxX(whiteKey.frame));

Ответ 5

Как его значения, вы не можете присвоить значение для выражения. Например, a + b = c это запрещено.