关于oc中expression is not assignable错误原因

Posted 墨VS雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于oc中expression is not assignable错误原因相关的知识,希望对你有一定的参考价值。

   在oc中当我们直接对self.view.frame.size.height = 100;进行赋值时,便会出现这个错误,这个错误的原因是在于:

self.view.frame是Objective-C语法的点语法,而frame属性是一个cgrect结构,frame.size.height是c语言的语法,由于oc只是c语言的扩展,因此上面这句话转化为c语言的形式调转就会变为:
getframe().size.height = 100f;

在c语言中,函数的返回值是一个R-Value,是不能给他直接赋值的(所谓的R-Value,就是只能出现在等号的右边,你可以理解成是一个常量;而可以被赋值的是L-Value,可以出现在等号的左边,通常是变量)。因此你直接给它赋值时,便会出现这个错误。解决办法是给这个函数加一个零时变量,修改零时变量,然后再赋值给frame。就可以实现修改frame内height和width的值。
例子:
// 1. 用一个临时变量保存返回值。
CGRect temp = self.view.frame;

// 2. 给这个变量赋值。因为变量都是L-Value,可以被赋值
temp.size.height = 100f;

// 3. 修改frame的值
self.view.frame = temp;

以上是关于关于oc中expression is not assignable错误原因的主要内容,如果未能解决你的问题,请参考以下文章

在窗口函数中使用不在 Group By 中的列,我得到: SQL 编译错误:[COLUMN_A] is not a valid group by expression

在 as 语句中 IS NOT NULL

Expression #1 of ORDER BY clause is not in SELECT list

[转]Xcode提示“expression is not assignable”

[解决方案]spark 2.4 报错:grouping expressions sequence is empty, *** is not an aggregate function.

node.js 安装express 提示 command is not found