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

