- Expression is not assignable
- Expression is not assignable
- expression is not assignable 错误
- Expression is not assignable分析
- [常见错误]Expression is not assignab
- 01-04、self.view.frame.size.heigh
- 关于不能直接修改frame的属性中的成员的问题
- 关于self.view.frame.size赋值会出现expre
- 为什么不能直接设置view.frame.size.height或
- 20.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;
网友评论