【发布时间】:2021-05-19 00:33:45
【问题描述】:
我目前正在开发一个单位转换应用程序,但遇到了一个问题,我仍在试图弄清楚如何解决它。该应用程序应该将一个单位转换为不同的单位,并且应该在每次将单位转换为不同的单位时转换并在文本视图中显示新值。(米到公里,英里到码等)。我创建了一个名为 result 的计算属性来处理转换,但是当我在模拟器中运行代码并在单位之间切换时,没有显示任何更改以显示成功转换的单位。我尝试在计算之前使用保护语句,因为在将 inputNumber 转换为整数后我认为 Value 为 0,但这似乎不起作用。我不确定我哪里出错了,但是对此的任何帮助将不胜感激。我在下面附上了代码和模拟器。 谢谢。
PS。我已经学会了如何并且可以使用 Apple 提供的测量功能来构建这个应用程序,我正在尝试通过基本上只使用数学计算来学习如何以不同的方式构建它。
struct ContentView: View {
@State private var inputNumber = ""
@State private var inputUnitValue = 2
@State private var outputUnitValue = 2
@State private var outputValue = ""
let inputUnits = ["Feet", "Meters", "Kilometers", "Yard", "Miles"]
let outputUnits = ["Feet", "Meters", "Kilometers", "Yard", "Miles"]
var result: Double {
var outputType = ""
var inputType = ""
let value = Double(inputNumber) ?? 0
var output = Double(outputValue) ?? 0
var input = Double(inputNumber) ?? 0
guard value > 0 else {
return 0
}
//Converts input value to input unit
switch inputUnits[inputUnitValue] {
case "meters":
input = value * 3.28
case "kilometers":
input = value * 3280.84
case "yards":
input = value * 3
case "miles":
input = value * 5280
case "feet":
input = value * 1
default:
input = value * 3.28
}
//Converts input unit to output unit
switch outputUnits[outputUnitValue] {
case "meters":
output = value / 3.28
case "kilometers":
output = value / 3280.84
case "yards":
output = value / 3
case "miles":
output = value / 5280
case "feet":
output = value / 1
default:
output = value / 3.28
}
return output
}
var body: some View {
NavigationView {
Form {
Section {
TextField("Value", text: $inputNumber)
.keyboardType(.numberPad)
}
Section(header: Text("Input Units")) {
Picker("Input Units", selection: $inputUnitValue) {
ForEach(0 ..< inputUnits.count) {
Text("\(self.inputUnits[$0])")
}
}
.pickerStyle(SegmentedPickerStyle())
}
Section(header: Text("Output Units")) {
Picker("Input Units", selection: $outputUnitValue) {
ForEach(0 ..< outputUnits.count) {
Text("\(self.outputUnits[$0])")
}
}
.pickerStyle(SegmentedPickerStyle())
}
Section (header: Text("output")){
Text("\(result, specifier: "%.2f")")
}
}
.navigationBarTitle("Unit Conversion")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
【问题讨论】:
-
我建议为您的不同单位类型使用
enum。见docs.swift.org/swift-book/LanguageGuide/Enumerations.html
标签: swift unit-testing swiftui