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

SwiftUI .onTapGesture调用operation方法后如何恢复初始输入值

SwiftUI 恢复汇率换算前原始输入值的实现方案

核心思路

新增状态属性存储触发换算前的原始输入值,执行换算前先做值备份,需要恢复时直接读取备份赋值即可。

具体实现步骤

  • 第一步:在状态结构体中新增备份属性,默认值与currentNumber初始值保持一致为0
struct CalculationState {
    var currentNumber: Double = 0
    // 新增属性存储换算前的原始输入值
    var originalInput: Double = 0
    // 可选新增标记位,区分值修改是用户输入还是程序换算触发
    var isUnderCalculation: Bool = false
}
  • 第二步:在.onTapGesture执行换算逻辑前,先备份当前输入值
.onTapGesture {
    // 标记当前为换算状态,避免onChange误更新原始备份
    state.isUnderCalculation = true
    // 备份当前输入值
    state.originalInput = state.currentNumber
    // 执行汇率换算
    state.currentNumber = function.operation(state.currentNumber)
    // 换算完成后重置状态标记
    state.isUnderCalculation = false
}
  • 第三步:在需要恢复原始值的触发逻辑中,直接把备份值赋值给currentNumber
// 示例:点击恢复按钮返回原始输入值
Button("恢复原始输入") {
    state.currentNumber = state.originalInput
}

适配多轮换算场景的优化

如果需要支持多次换算后依然能恢复到用户最开始的手动输入值,只需在用户输入时同步更新备份值即可:

TextField("请输入换算金额", value: $state.currentNumber, format: .number)
    .onChange(of: state.currentNumber) { newValue in
        // 仅用户手动输入触发的值修改才更新备份
        guard !state.isUnderCalculation else { return }
        state.originalInput = newValue
    }

内容的提问来源于stack exchange,提问作者Nursultan Yelemessov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 22:21:02