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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:04:53