关于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;
时间: 2024-08-27 11:21:10

关于oc中expression is not assignable错误原因的相关文章

在编译oc中protocol时出现的错误

Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang failed with exit code 1 解决方法:在Build Setting  搜索框中搜索pch,找到了Prefix Header,把后面的Debug中和release中的所有信息都删除就可以解决.

10.OC中retainCount返回值不准的原因

翻看该方法的参考文档,苹果对retainCount方法的描述如下: retainCount Do not use this method. (required) - (NSUInteger)retainCount Return Value The receiver’s reference count. Special Considerations This method is of no value in debugging memory management issues.Because an

OC中ARC forbids explicit message send of release错误

在ios编程中,如果成员变量为对象,我们需要对成员变量内存管理,否则,会造成内存泄露.即我们要对成员变量进行手动的内存释放. 很显然,是ARC的问题. 错误原因:在创建工程的时候点选了“Use Automatic Reference Counting”选项,但是又调用了对象的release方法 ARC是什么? ARC是iOS 5推出的新功能,全称叫 ARC(Automatic ReferenceCounting).简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来

OC中ARC forbids explicit message send of release错误(转)

ARC forbids explicit message send of'release' 很显然,是ARC的问题. 错误原因:在创建工程的时候点选了“Use Automatic Reference Counting”选项,但是又调用了对象的release方法 ARC是什么? ARC是iOS 5推出的新功能,全称叫 ARC(Automatic ReferenceCounting).简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自

self.view.frame.size.height = 100f; 这样写没法通过编译,编译器会报错"expression is not assignable"

self.view.frame.size.height = 100f; 这样写没法通过编译,编译器会报错"expression is not assignable" 原因是,这句话里面的几个点有两种不同的含义.self.view.frame是Objective-C语法,是读取view属性的frame属性,在Objective-C中使用点来访问属性只是一种语法糖,所以self.view.frame这句话会被转换成: [[self view] frame] 也就是说,实际上这是消息传递.

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

你的问题是: self.view.frame.size.height = 100f; 这样写没法通过编译,编译器会报错"expression is not assignable" 原因是,这句话里面的几个点有两种不同的含义.self.view.frame是Objective-C语法,是读取view属性的frame属性,在Objective-C中使用点来访问属性只是一种语法糖,所以self.view.frame这句话会被转换成: [[self view] frame] 也就是说,实际上这

Xcode提示“expression is not assignable”

你的问题是: self.view.frame.size.height = 100f; 这样写没法通过编译,编译器会报错"expression is not assignable" 原因是,这句话里面的几个点有两种不同的含义.self.view.frame是Objective-C语法,是读取view属性的frame属性,在Objective-C中使用点来访问属性只是一种语法糖,所以self.view.frame这句话会被转换成: [[self view] frame] 也就是说,实际上这

关于void*类型的用法(相当于OC中的id类型)

关于void*类型的用法(相当于OC中的id类型) 1.C++语言在对于void* 类型的使用很特别,因为void* 可以间接引用任何其他数据类型的指针,比如int*.float*甚至抽象数据类型的指针,而且可以从void* 强制转换为任何其他数据类型的指针,所以使用起来有时候会比较危险.如果开始将一个void*的指针间接引用一个float*的指针,然后将这个void*指针强制转化为一个int*类型的指针,编译器不会给出错误甚至警告,但是输出的数据却匪夷所思,如果再强制转换会float*则不会出

OC中类别、扩展、协议与委托

类别(category)--通过使用类别,我们可以动态地为现有的类添加新方法,而且可以将类定义模块化地分不到多个相关文件中.通常只在类别中定义方法. 类别,接口部分的定义,通常该文件命名为已有"类+类别名.h" @interface 已有类 (类别名) //.......方法实现 @end 例如,考虑为NSNumber增加一个类别,则接口部分代码如下 <p style="margin-top: 0px; margin-bottom: 0px; font-family: