美文网首页
01-04、self.view.frame.size.heigh

01-04、self.view.frame.size.heigh

作者: 山中石头 | 来源:发表于2017-10-12 15:35 被阅读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;

getter里并不能赋值,因此,当你打算直接给函数的返回值赋值的时候,编译器告诉你"这个表达式无法被赋值"。这就是这个错误的出现原因。

处理方案:

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

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

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

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

我知道这样写看起来有点笨,也许有一天,Objective-C的编译器会变的智能一点,自动完成这种转换。

相关文章

  • 01-04、self.view.frame.size.heigh

    问题: 这样写没法通过编译,编译器会报错"expression is not assignable" 原因是,这句...

  • 左手数据,右手图表

    本书作者 微信号:ExcelBro 推荐文献《Excel图表之道》、《用地图说话》--作者:刘万祥 01-04章:...

  • 这才是天才的行为学

    M先生 某控股集团董事总经理 2017-01-04 10:47 加成好友 01-04 11:31 M...

  • 2021.9.8

    04:01-04:13 07:48-08:00 09:53-10:01 12:56-13:16 16:35-16:...

  • 01-04作业

    1. 编写一个函数,求1+2+3+...+N 2. 编写一个函数,求多个数中的最大值 3. 编写一个函数,实现摇色...

  • 01-04 作业

    编写一个函数,求1+2+3+...+N 编写一个函数,求多个数中的最大值 编写一个函数,实现摇色子的功能,打印n个...

  • 01-04 随笔

    今天又噜噜打针的一天,养孩子贵咯,打个针就要700多块。 孩子的脚踝肉缝那里有点疹子,老毛病了。这次准备去重庆儿童...

  • 2023— 01-04

    2023 1.4 周三 晴 今天一天都在坐车中,早上8:00起床,就简单做了一个蛋炒饭,然后去买了点...

  • ES6

    目录 01-01 Let、const命令 01-02 解构解析 01-03 正则扩展 01-04 字符串扩展 01...

  • 扶贫日记(01-04)

    精准扶贫专项督查情况汇报 根据市委市政府工作安排,2018年1月4日,我督查组采取到镇到村、座谈交流、查...

网友评论

      本文标题:01-04、self.view.frame.size.heigh

      本文链接:https://www.haomeiwen.com/subject/cmcoyxtx.html