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
相关产品推荐
相关产品推荐

