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

Mah*_*hir 41 floating-point objective-c variable-assignment ios cgrect

在钢琴应用程序中,我正在分配黑键的坐标.这是导致错误的代码行.

'blackKey'和'whiteKey'都是customViews

blackKey.center.x = (whiteKey.frame.origin.x + whiteKey.frame.size.width);
Run Code Online (Sandbox Code Playgroud)

Chu*_*uck 82

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

当你写blackKey.center.x的时候blackKey.center,center.x两者看起来都像是结构成员访问,但它们实际上是完全不同的东西.blackKey.center是一个属性访问,这类似的东西[blackKey center],这反过来desugars类似的东西objc_msgSend(blackKey, @selector(center)).你不能修改函数的返回值,比如objc_msgSend(blackKey, @selector(center)).x = 2- 它只是没有意义,因为返回值不存储在任何有意义的地方.

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

  • @EmptyStack:当你编写`anObject.someProperty = something`时,它不等同于`[anObject someProperty] = something` - 相反,它等同于`[anObject setSomeProperty:something]`.您正在向对象发送消息以调用setter方法.您没有分配方法的返回值.赋值的出现只是语法糖,就像成员访问的外观是getter方法的语法糖一样. (4认同)

Emp*_*ack 19

你不能直接改变x的值CGPoint这样的(或结构的任意数值),如果它是一个对象的属性.做类似以下的事情.

CGPoint _center = blackKey.center;
_center.x =  (whiteKey.frame.origin.x + whiteKey.frame.size.width);
blackKey.center = _center;
Run Code Online (Sandbox Code Playgroud)


Dai*_*air 10

blackKey.center = CGPointMake ( whiteKey.frame.origin.x + whiteKey.frame.size.width, blackKey.center.y);
Run Code Online (Sandbox Code Playgroud)

一种方法.