[转]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]
也就是说,实际上这是消息传递。

而frame属性是一个CGRect结构,所以frame.size.height是C语言的语法,就是访问CGRect结构中的size字段,同样,height是CGSize结构的一个字段。所以,你这句话实际上等于:

[[self view] frame].size.height = 100f;
而Objective-C只是对C语言的一个扩展,所以,上面这句话会被转成C语言的函数调用形式,类似于这种形式:

getframe().size.height = 100f;
而在C语言里,函数的返回值是一个R-Value,是不能直接给它赋值的(所谓的R-Value,就是只能出现在等号的右边,你可以理解成是一个常量;而可以被赋值的是L-Value,可以出现在等号的左边,通常是变量)。因此,当你打算直接给函数的返回值赋值的时候,编译器告诉你"这个表达式无法被赋值"。这就是这个错误的出现原因。

所以,解决办法就是,用一个临时变量保存这个函数的返回值,修改这个临时变量,然后再赋给frame:

// 1. 用一个临时变量保存返回值。
CGRect temp = self.view.frame;

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

// 3. 修改frame的值
self.view.frame = temp;
我知道这样写看起来有点笨,也许有一天,Objective-C的编译器会变的智能一点,自动完成这种转换。
时间: 2024-11-02 04:11:45

[转]Xcode提示“expression is not assignable”的相关文章

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] 也就是说,实际上这

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] 也就是说,实际上这是消息传递.

错误提示:'……' is not assignable to Android.app.Activity Manifest XML

1   问题描述:   针对这段代码: <activity android:name=".fragament.fragment_bulter" /> <activity android:name=".fragament.fragment_girl" /> <activity android:name=".fragament.fragment_user" /> <activity android:name=

Xcode 的expression命令

expression命令是执行一个表达式,并将表达式返回的结果输出,是LLDB调试命令中最重要的命令,也是我们常用的 p 和 po 命令的 鼻祖. 他主要有2个功能 (1) 执行表达式 举例:改变视图背景颜色(无需改变xcode中的项目文件代码) (2) 输出返回值 衍生出的扩展命令 p &print &e &call  命令 这几个命令其实就是 "expression  -- " 的别名 po命令 oc里所有的对象都是用指针表示的,打印出来的是对象的指针,而不

Swift代码注释分析 xcode提示 提高可读性

详细地址:http://www.code4app.com/forum.php?mod=viewthread&tid=9133#lastpost 昨天看自己的代码的时候发现自己的注释实在是太乱了,也看不大清楚 之前用oc的时候也用过简单的注释,于是乎就去找了点资料看了下 ,swift下几个注释关键字都变了 主要是 [Objective-C] 查看源文件 复制代码 ? 1 2 3 4 5 6 7 8 9 `//` `///` `//MARK: - ` `//TODO: -` `//FIXME: -

xcode 提示account验证过期

1.开发环境下账号信息-APPle ID,有一定的期限从新验证 打开 xcode  ---左上角  preferences  ---accounts  重新登录一下 2.但是最近苹果服务器发生了问题,重新登录总是不成功 后来大神们发现,打开apple id双重验证功能(打开地方看下图),就可以重新登录,然后打包了

cocos2d-x 运行时xcode提示错误:&quot;vtable for XXX&quot;, referenced from 问题已解决;

vtable/引用和虚函数相关,今天在添加一个层的时候报了这个错误,很低级的错误,忘了实现虚函数了(谨记!!) 若如果实现了虚函数还依然如此的话,可能是创建的时候忘了钩上 -desktop 选项了,把类删除了再次添加注意钩上即可

关于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,是不能给他直接赋值的

Xcode提示“Valid signing identity not found”的解决方法

1:首先进行Organizer,Provisioning file里所有显示为黄色感叹号的文件删掉.(设备里provisioning file也同样操作,在Organizer内也可完成) 2:打开Keychain Access (钥匙串访问),'菜单栏' -> '钥匙串设访问' ->  '证书助理' -> "从证书颁发机构申请证书",选择"存储到磁盘",输入必要信息 3:继续后,将会得到一个名为"CertificateSigningReq