文档章节

转: Xcode提示“expression is not assignable”

PandaEyes
 PandaEyes
发布于 2016/04/16 19:12
字数 460
阅读 11
收藏 0
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的编译器会变的智能一点,自动完成这种转换。

本文转载自:https://segmentfault.com/q/1010000000177216

PandaEyes
粉丝 0
博文 13
码字总数 0
作品 0
深圳
程序员
私信 提问
Xcode提示“expression is not assignable”

你的问题是: self.view.frame.size.height = 100f; 这样写没法通过编译,编译器会报错"expression is not assignable" 原因是,这句话里面的几个点有两种不同的含义。self.view.frame是Obj...

Jack088
2015/10/27
3.5K
0
Spring4 学习系列之——在classpath目录下扫描组件

•当在组件类上使用了特定的注解之后, 还需要在 Spring 的配置文件中声明 context:component-scan : –base-package 属性指定一个需要扫描的基类包,Spring 容器将会扫描这个基类包里及其子...

Chenaiwei
2016/10/31
70
0
《Spring Recipes》第一章笔记:Scanning Components from ...

问题 当需要注入的bean太多时,手工进行配置太费时费力,Spring容器提供了指定扫描功能。 解决方案 使用Spring的component scanning功能。可以通过@Component,@Repository, @Service , 和@...

LiJIaming
2012/05/15
121
0
如何在lion系统下安装Xcode 3.2.x版本

1、用Disk Utility(在实用工具里面)把Xcode 3.2.x的磁盘映像(dmg文件,我是使用3.2.6进行尝试)转换成一个可读写的dmg文件。 转 换好后双击它,让Finder在设备里面显示它。在Finder里面右...

陈小冶
2012/12/21
161
1
Xcode基本操作

1.Xcode IDE概览 说明:从左到右,依次是“导航窗格(Navigator)->边列(Gutter)->焦点列(Ribbon)->代码编辑窗口(Standard/PrimaryEditor)”。 边列(Gutter):显示行号和断点。 焦点...

jay603
2016/04/05
265
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
6
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多