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

