Expression is not assignable分析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Expression is not assignable分析相关的知识,希望对你有一定的参考价值。
参考技术A 当我们想要修改CGSize,CGRect中的某个参数时我们如果这样写:self.view.frame.size.height = 10.f;
编译器会报错: 'Expression is not assignable'
这是因为 self.view.frame 是Objective-C中的 点语法 , 点语法 本质就是 set与get方法 ,是读取或者设置view的frame属性,实际上这是消息传递。
而 frame 属性是一个 CGRect 结构,所以 frame.size.height 是C语言的语法,就是访问CGRect结构中的size字段,同样,height是CGSize结构的一个字段, 这里的点并不是点语法,而是C中结构体访问字段的方式 。
我们知道,点语法在等号左侧就是set方法,在右侧就是get方法,是不够精准的,例如 self.view1.view2.view3.frame ,在等号左侧的时候,OC语法会把它转换成 [[[[self getView1] getView2] getView3] setFrame] ,实际只有最后一个OC的点语法代表了set方法。
self.view.frame 在等号的左侧, frame 后面的 点 是C语法, view.frame 中的 点 是这个语句中最后一个OC点语法,所以这个 点 代表 set方法 , self.view.frame 在等号的左侧 ,OC 点语法会把它转换成 [[self getView]setFrame:frame] 是一个设值方法 参数是frame。这句话会被转成C语言的函数调用形式,类似于这种形式: set_frame(frame) ,所以 self.view.frame 这个语句在等号左边是一个需要frame参数并且无返回值的函数。
在C语言里, set_frame(frame).size.height = 10.f 给一个无返回值函数直接赋值,并且你还没有给这个函数进行传参,这是一种错误的语法。所以编译器告诉你"这个表达式无法被赋值"。
解决办法就是,用OC中的点语法也就是get方法取这个结构体属性,用C的结构体点语法对这个属性中的字段进行修改,然后用OC中的点语法也就是set方法设置这个结构体属性
说白了 导致这个问题出现的原因就是 点语法的问题,有的点是OC语法 有的点是C语法。C语法是没有问题的,问题在于OC是怎么判断点语法什么时候是set方法,什么时候是get方法。我们理所当然的认为了view.frame中的点是一个get方法,实际在这里OC把它当做了set方法。
[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause 的问题 MySQL
问题:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column \'information_schema.PROFILING.SEQ\' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
解决方案:
select version(),
@@sql_mode;SET sql_mode=(SELECT REPLACE(@@sql_mode,\'ONLY_FULL_GROUP_BY\',\'\'));
完美的解决方案是:
1 show variables like "sql_mode"; 2 3 set sql_mode=\'\'; 4 set sql_mode=\'NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES\';
以上是关于Expression is not assignable分析的主要内容,如果未能解决你的问题,请参考以下文章
[转]Xcode提示“expression is not assignable”
Expression #1 of ORDER BY clause is not in SELECT list
[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause 的问题 MySQL
[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause 的问题 MySQL
1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contai
解决[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause 的问题 MySQL