编译时 报错处理(一)结构体问题

本文探讨了OC编程中遇到的结构体属性不可直接修改的问题,解释了OC语法规定的原因,并提供了两种解决方案:一是通过先赋值再修改后重新赋回结构体;二是单独提取并修改成员变量后更新整个结构体。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


_btn.frame.origin.y -= 10;

expression is not assignable

报错原因:OC语法规定:不允许直接修改某个对象的结构体属性的成员

_btn 是个对象

frame是个结构体。

对象和结构体是不一样的,结构体是C语言中的,里面可以定义许多属性,但是不能定义方法,而对象是即可以定义属性又可以定义方法的,是典型的面向对象语法。

如何改变对象中结构体属性的成员:

解决方法一:

    // 既然不能直接修改对象中的结构体属性成员

    // 先取出结构体

    CGRect frame =_btn.frame;

    // 修改结构体

    frame.origin.y -=10;

    // 将修改后的结构体重新赋值回去

    _btn.frame = frame;


解决方法二:

    // 先取出y

    CGFloat y =_btn.frame.origin.y;

    // 修改y

    y -= 10;

    // 重新设置_btny值,其他属性和_btn保持不变

_btn.frame =CGRectMake(_btn.frame.origin.x, y,_btn.frame.size.width,_btn.frame.size.height);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值