Objective-C之报错:Expression is not assignable.

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SpicyBoiledFish/article/details/79817517

最近开始着手计划在学习原生语言 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中。

猜你喜欢

转载自blog.csdn.net/SpicyBoiledFish/article/details/79817517