Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
swiftUI中的双精度字符串_Swift_Swiftui - Fatal编程技术网

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)”的完整代码,完全有道理,新手错误。谢谢你看一看。