You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift类中声明的字符串修改后总是恢复为原始值问题求助

问题原因及修复方案

核心问题1:每次调用都创建了全新的类实例

你当前按钮调用的代码Calculation().modifyCalcString(newData: digit)中,Calculation()每次执行都会生成一个全新的Calculation临时对象,你修改的只是这个临时对象的属性,调用完成后临时对象就会被销毁。下一次触发按钮点击时,又会创建新的初始状态的实例,所以属性值会变回"test"。

优化问题2:ObservableObject属性缺少响应式修饰

你定义的类继承了ObservableObject,但需要监听变化的属性没有加@Published修饰,就算后续复用同一个实例,视图也无法收到属性变化的通知,无法自动刷新UI。

修复步骤
  • 在视图层持有全局唯一的Calculation实例,不要每次调用都新建。如果是SwiftUI项目,使用@StateObject修饰实例保证仅初始化一次:
struct YourCalculationView: View {
    // 全局复用该实例,生命周期和视图绑定
    @StateObject private var calculation = Calculation()
    // digit定义省略
    var body: some View {
        Button(action: {
            // 复用已有的实例调用方法,修改的是同一个对象的属性
            calculation.modifyCalcString(newData: digit)
        }, label: {
            Text("输入\(digit)")
        })
    }
}
  • 给Calculation类的待监听属性加@Published修饰:
class Calculation: ObservableObject {
    @Published var CalcString: String = "test"
    
    func modifyCalcString(newData: String) {
        CalcString = CalcString + newData
        print(CalcString)
    }
}

内容的提问来源于stack exchange,提问作者Ori Levy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:36:11