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

SwiftUI如何将if语句结果赋值给dday实现数字数位求和至个位数

Swift实现数字逐位相加至单个数字(数根计算)

需求梳理

  • 绑定输入框的字符串变量day1获取用户输入的数字
  • 需要实现逐位相加逻辑,直到得到单个数字后停止:比如输入16返回7,输入29返回2
  • 原有代码仅支持最多2位数字计算,输入更多位数时会出错

优化后完整可运行代码

import SwiftUI

struct ContentView: View {
    @State private var day1 = ""
    
    // 最终输出的单个数字结果
    private var finalResult: Int {
        // 输入转整数,非法输入默认返回0
        guard var num = Int(day1) else { return 0 }
        // 本身就是单个数字直接返回
        guard num >= 10 else { return num }
        
        // 循环逐位相加直到得到单个数字
        var sum = 0
        while num >= 10 {
            sum = 0
            // 逐位取数求和
            while num > 0 {
                sum += num % 10
                num = num / 10
            }
            num = sum
        }
        return num
    }
    
    var body: some View {
        VStack {
            TextField("day", text: $day1)
                .keyboardType(.numberPad)
                .frame(width: 70, height: 20)
                .padding()
                .background(Color.gray)
                .cornerRadius(15)
                .padding()
                .font(.largeTitle)
            
            Text("\(finalResult)")
                .font(.largeTitle)
                .fontWeight(.heavy)
                .foregroundColor(Color.red)
                .frame(width: 70, height: 20)
                .padding()
                .background(Color.gray)
                .cornerRadius(15)
                .padding()
        }
    }
}

改动说明

  • 新增了统一的计算属性finalResult,内部封装了完整的逐位求和逻辑,支持任意位数的数字输入,不需要手动拆分第一位、第二位
  • 去掉了冗余的多个中间计算属性和界面层的if判断,逻辑更简洁,也避免了位数不足时的计算错误
  • 输入非数字内容时默认返回0,做了容错处理

内容的提问来源于stack exchange,提问作者Ramlan A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:27:02