Objective-C之报错:Expression is not assignable.
程序员文章站
2022-07-14 21:33:24
...
最近开始着手计划在学习原生语言 Objective-C,一路上遇到的坑,我也会一一记录下来,都是一些踩坑的经验。因为总有那么一天,会有人因为看到我写的某篇技术博客,而受益良多。会更加激励自己不断前进。
在学习一个UIButton中附上背景图后,点击按钮移动位置的这个小demo中,代码附上:
- (IBAction)leftBtn {
CGRect originFrame = self.img.frame;
originFrame.origin.x -=10;
self.img.frame = originFrame;
NSLog(@"左");
}
比方这个向左的点击事件。首先拿到这个UIButton的img的frame。而这个frame是结构体CGRect类型,所以需要用CGReact 变量名存一下。然后进行origin(x/y)或者size(width/height)的变化。最后竟然还需要加一步:self.img.frame = originFrame.再赋值回去。
真的要是以我之前js的弱类型写法,就会直接写成:
self.img.frame.origin.x -=10;
就会报错了,重点来了:
然而OC并不是这样,因为我们这个UIButton是OC对象;而当OC对象中的属性frame是结构体类型,修改结构体类型属性frame的时候,必须要先用结构体类型CGRect存储后,再进行赋值表达式计算;然后要再将计算好了的值重新赋值给self.img.frame.
结构体是值传递,不是地址传递。需要将值计算完成之后,再赋值到原来的对象frame中。
下一篇: 入门kafka