swiftUI中的双精度字符串
我有一个问题,我已经设法解决了,但我真的不知道为什么它没有工作的第一种方式,我尝试。如果有人对此有答案,我将不胜感激 在我的内容视图中,我有一个简化的计算变量,如下所示:swiftUI中的双精度字符串,swift,swiftui,Swift,Swiftui,我有一个问题,我已经设法解决了,但我真的不知道为什么它没有工作的第一种方式,我尝试。如果有人对此有答案,我将不胜感激 在我的内容视图中,我有一个简化的计算变量,如下所示: struct ContentView: View { var convertedFigure: String { //various calculations based on state variables to get example convertedValueRaw below
struct ContentView: View {
var convertedFigure: String {
//various calculations based on state variables to get example convertedValueRaw below
var convertedValueRaw: Double = 2.25
var convertedValueString = String(convertedValueRaw)
return convertedValueString
}
var body: some View {
Text(convertedFigure)
}
}
但是,当double转换为字符串时,它总是显示为0,而不是我在上面的代码2.25中给出的示例。我让它工作的唯一方法是以下操作,本质上是将double转换为正文中的字符串,而不是转换为convertedFigure变量中的字符串:
struct ContentView: View {
var convertedFigure: Double {
//various calculations based on state variables to get example convertedValueRaw below
var convertedValueRaw: Double = 2.25
return convertedValueRaw
}
var body: some View {
Text(String(convertedFigure))
}
}
我真的不明白为什么不能在convertedFigure变量中将double转换为字符串,而必须在Text UI元素中进行转换
完整代码供参考:
import SwiftUI
struct ContentView: View {
@State private var inputValue: String = ""
@State private var selectedInputUnit: String = "meters"
@State private var selectedOutputUnit: String = "meters"
var convertedFigure: String {
let valueInputted = Double(inputValue) ?? 0
var baseValueInMeters: Double = 0
var convertedValueRaw: Double = 0
let convertedValueString = String(convertedValueRaw)
switch selectedInputUnit {
case "meters":
baseValueInMeters = valueInputted
case "kilometers":
baseValueInMeters = valueInputted / 0.001
case "feet":
baseValueInMeters = valueInputted / 3.28
case "yards":
baseValueInMeters = valueInputted / 1.09
case "miles":
baseValueInMeters = valueInputted / 0.00062
default:
baseValueInMeters = 0
}
switch selectedOutputUnit {
case "meters":
convertedValueRaw = baseValueInMeters
case "kilometers":
convertedValueRaw = baseValueInMeters * 0.001
case "feet":
convertedValueRaw = baseValueInMeters * 3.28
case "yards":
convertedValueRaw = baseValueInMeters * 1.09
case "miles":
convertedValueRaw = baseValueInMeters * 0.00062
default:
baseValueInMeters = 0
}
return convertedValueString
}
let units: [String] = ["meters", "kilometers", "feet", "yards", "miles"]
var body: some View {
NavigationView{
Form {
//text field for value input
Section{
TextField("Enter value to convert", text: $inputValue)
.keyboardType(.decimalPad)
}
//segmented control for input
Section(header: Text("Select an input unit")){
Picker("unit selection input", selection: $selectedInputUnit) {
ForEach(units, id: \.self) {
Text($0)
}
}.pickerStyle(SegmentedPickerStyle())
}
//segmented control for output
Section(header: Text("Select an output unit")){
Picker("unit selection input", selection: $selectedOutputUnit) {
ForEach(units, id: \.self) {
Text($0)
}
}.pickerStyle(SegmentedPickerStyle())
}
//text to show output
Section(header: Text("Converted figure:")){
Text(convertedFigure)
//Text(String(format: "%.3f", convertedFigure))
}
Section{
Button("Debug") {
print(self.selectedInputUnit)
print(self.selectedOutputUnit)
print(self.convertedFigure)
}
}
}.navigationBarTitle("iConvert")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
当
convertedValueRaw
的值为0
时,您过早地计算了convertedValueString
。将其移动到函数的末尾:
var convertedFigure: String {
let valueInputted = Double(inputValue) ?? 0
var baseValueInMeters: Double = 0
var convertedValueRaw: Double = 0
// Move this ...
// let convertedValueString = String(convertedValueRaw)
switch selectedInputUnit {
case "meters":
baseValueInMeters = valueInputted
case "kilometers":
baseValueInMeters = valueInputted / 0.001
case "feet":
baseValueInMeters = valueInputted / 3.28
case "yards":
baseValueInMeters = valueInputted / 1.09
case "miles":
baseValueInMeters = valueInputted / 0.00062
default:
baseValueInMeters = 0
}
switch selectedOutputUnit {
case "meters":
convertedValueRaw = baseValueInMeters
case "kilometers":
convertedValueRaw = baseValueInMeters * 0.001
case "feet":
convertedValueRaw = baseValueInMeters * 3.28
case "yards":
convertedValueRaw = baseValueInMeters * 1.09
case "miles":
convertedValueRaw = baseValueInMeters * 0.00062
default:
baseValueInMeters = 0
}
// ... to here:
let convertedValueString = String(convertedValueRaw)
return convertedValueString
}
或者简单地转换并同时返回:
return String(convertedValueRaw)
2个示例无法重现我只是添加了不适用于referencevar a=“/(doblevalue)”的完整代码,完全有道理,新手错误。谢谢你看一看。