SwiftUI中每秒调用inc_by_one函数并在Text组件展示结果的问题
问题分析与解决
你的代码核心问题在于:每次定时器触发时,你都固定传入100给inc_by_one函数,导致每次计算结果都是100 * 1.01 = 101,无法实现复利增长的效果。要达成每秒在上一次结果基础上增加1%的需求,必须把当前的theValue作为参数传入函数,而非固定值100。
修改后的完整代码
import SwiftUI import Combine struct ContentView: View { // 初始值设为需求的100,而非0.0 @State private var theValue = 100.0 let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect() var body: some View { VStack { // 格式化显示保留两位小数,更贴合金额场景 Text(String(format: "%.2f", theValue)) .onReceive(timer) { _ in // 传入当前的theValue,实现复利累加 theValue = inc_by_one(dollar_amt: theValue) } } } } // 你的原函数无需修改 func inc_by_one(dollar_amt: Double) -> Double { return dollar_amt * 1.01 }
关键修改点
- 初始化
theValue为100.0,匹配需求的初始传入值 - 定时器回调中,用当前的
theValue作为参数调用inc_by_one,确保每次在上一次结果的基础上增长1% - 给
Text添加格式化处理,用String(format: "%.2f", theValue)保留两位小数,展示效果更规范
修改后运行即可得到预期结果:1秒后显示101.00,2秒后显示102.01,3秒后显示103.03,以此类推。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

