Expression is not assignable

参考文章: http://blog.csdn.net/like7xiaoben/article/details/8969093

self.view.frame.origin.x = x; // Expression is not assignable.

为什么编译器会报这样的错?
self.view.frame是Objective-C中的点语法,读取了view的frame属性,在Objective-C中使用点语法来访问属性是一种语法糖, self.view.frame语句会被转换成:

[[self view] frame];

终究这还是消息的传递.
其中frame是一个CGRect结构, frame.origin.x 是C语言中的语法, 先访问CGRect中的origin字段, 再访问CGPoint中的x字段, 即

[[self view] frame].origin.x = x;

而Objective-C语言是对C语言的一个扩展,所以,上面的语句会被转成C语言的函数调用形式,类似于这种形式:

getFrame().origin.x = x;

在C语言中,函数的返回值是一个R-Value,是不能直接给它赋值的(所谓的R-Value,就是只能出现在等号的右边,你可以理解成是一个常量;而可以被赋值的是L-Value,可以出现在等号的左边,通常是变量)。因此,当我们想要直接给函数的返回值赋值的时候,编译器告诉我们"这个表达式无法被赋值".
解决方案:
我们可以用一个临时变量保存这个函数的返回值,修改这个临时变量,然后再赋给frame:

CGRect frame = self.view.frame;
frame.origin.x = x;
self.view.frame = frame;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容