在Swift for macOS(Xcode13)中基于两个TextField输入计算Volume Divided的实现方法

完整实现代码
原始代码存在参数传递错误、缺少状态变量声明、函数调用不符合Swift语法规范的问题,以下是适配macOS + Xcode 13的可直接运行的SwiftUI实现:
import SwiftUI struct VolumeCalcView: View { // 绑定两个输入框的数值 @State private var radicalmassscale: Double = 1.0 @State private var radicalvolscale: Double = 1.0 // 数字输入格式化器,避免非法输入和分母为0 private let formatter: NumberFormatter = { let fmt = NumberFormatter() fmt.numberStyle = .decimal fmt.minimum = 0.0001 return fmt }() // 第一级计算逻辑 private var cubemassatomscale: Double { (((2 / cbrt(2)) + radicalmassscale) - 1) + radicalmassscale } // 最终Volume Divided计算逻辑 private var volScaleResult: Double { cubemassatomscale / radicalvolscale } var body: some View { VStack(spacing: 14) { Text("Volume + Sigcothian:") .font(.callout) .bold() TextField("#", value: $radicalmassscale, formatter: formatter) .textFieldStyle(RoundedBorderTextFieldStyle()) .overlay( RoundedRectangle(cornerRadius: 6) .stroke(Color.blue, lineWidth: 2) ) TextField("#", value: $radicalvolscale, formatter: formatter) .textFieldStyle(RoundedBorderTextFieldStyle()) .overlay( RoundedRectangle(cornerRadius: 6) .stroke(Color.blue, lineWidth: 2) ) Text("Volume Divided: \(volScaleResult, specifier: "%.4f")") .font(.callout) .bold() .frame(width: 200, height: 60, alignment: .leading) } .padding() Divider() } }
改动说明
- 新增
@State修饰的变量绑定两个输入框的数值,输入变更时会自动触发结果重算和UI刷新 - 将原有的两个函数改为计算属性,无需手动传参即可读取最新的输入值计算
- 新增数字格式化器限制输入规则,同时设置输入最小值避免分母为0触发崩溃
- 结果显示新增小数位控制,可调整
specifier的参数自定义保留的小数位数
内容的提问来源于stack exchange,提问作者user16933914
相关产品推荐
相关产品推荐

