Swift中结构体新实例调用方法的方式及报错解决方案
报错原因
Swift 中结构体属于值类型,默认不允许在实例方法内修改实例自身的存储属性。你的chargePhone方法需要修改电量属性,但未添加mutating修饰符,因此触发编译报错。
另外你描述的方法逻辑存在条件倒置:需求为电量低于90时充电,你写的判断逻辑是电量不低于90才充电,不符合实际预期。
修复步骤
- 给需要修改结构体属性的实例方法添加
mutating关键字,标记该方法会修改值本身 - 修正充电判断条件,补充电量上限校验,避免电量值超过100
- 调用该方法的结构体实例必须用
var声明,不能用let声明(常量值类型不允许修改)
修复后可运行的参考代码:
struct Phone { var batteryLevel: Int mutating func chargePhone() { // 电量高于等于90时不充电 guard batteryLevel < 90 else { return } batteryLevel += 10 // 限制电量最大值为100 batteryLevel = min(batteryLevel, 100) } } // 调用示例 var myPhone = Phone(batteryLevel: 70) myPhone.chargePhone() // 执行后 myPhone.batteryLevel 为 80
原报错截图

内容的提问来源于stack exchange,提问作者ali9000
相关产品推荐
相关产品推荐

