“表达式不可分配” - 问题是将float指定为xCode中另外两个浮点数的总和?

时间:2011-08-16 06:35:12

标签: objective-c ios floating-point variable-assignment cgrect

在钢琴应用中,我正在指定黑键的坐标。 以下是导致错误的代码行。

'blackKey'和'whiteKey'都是customViews

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

5 个答案:

答案 0 :(得分:82)

其他答案并没有准确解释这里发生了什么,所以这是基本问题:

当你写blackKey.center.x时,blackKey.centercenter.x看起来都像是结构成员访问,但它们实际上是完全不同的东西。 blackKey.center是一种属性访问权限,可以访问类似[blackKey center]的内容,而objc_msgSend(blackKey, @selector(center))则会使objc_msgSend(blackKey, @selector(center)).x = 2之类的东西变得荒谬。你不能修改函数的返回值,比如{{1}} - 它只是没有意义,因为返回值不是存储在任何有意义的地方。

因此,如果要修改结构,则必须将属性的返回值存储在变量中,修改变量,然后将该属性设置为新值。

答案 1 :(得分:19)

如果它是对象的属性,则不能直接更改x(或结构的任何值)的CGPoint值。做类似以下的事情。

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

答案 2 :(得分:10)

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

一种方法。

答案 3 :(得分:0)

使用宏的另一种选择:

#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));

答案 4 :(得分:0)

就其含义而言,您不能为表达式分配值。例如,a + b = c是禁止的。