在一个钢琴应用程序中,我分配黑键的坐标.
"blackKey"和"whiteKey"都是自定义视图
blackKey.center.x = (whiteKey.frame.origin.x + whiteKey.frame.size.width);
在一个钢琴应用程序中,我分配黑键的坐标.
"blackKey"和"whiteKey"都是自定义视图
blackKey.center.x = (whiteKey.frame.origin.x + whiteKey.frame.size.width);
其他答案并不能确切解释这里发生了什么,所以这是一个基本问题:
当你写blackKey.center.x
时,blackKey.center
和center.x
看起来都像是 struct 成员访问,但实际上它们是完全不同的东西.blackKey.center
是一个属性访问,它可以访问[blackKey center]
,然后再访问objc_msgSend(blackKey, @selector(center))
.你不能修改函数的返回值,比如objc_msgSend(blackKey, @selector(center)).x = 2
——它就是没有意义,因为返回值没有意义.
因此,如果要修改 struct ,必须将属性的返回值存储在变量中,修改变量,然后将属性设置为新值.