处理单位转换的应用程序

单位转换器


一、题目

构建一个处理单位转换的应用程序:用户将选择一个输入单位和一个输出单位,然后输入一个值,然后查看转换的输出。
可供选择的单位:
温度转换:用户选择摄氏(Celsius)、华氏(Fahrenheit)或开尔文(Kelvin)。
长度换算:用户选择米(meters)、公里(kilometers)、英尺(feet)、码(yards)或英里(miles)。
时间转换:用户选择秒(seconds)、分(minutes)、小时(hours)或天(days)。
体积换算:用户选择毫升(milliliters)、升(liters)、杯(cups)、品脱(pints)或加仑(gallons)。

如果要进行长度转换:
输入单位的米、公里、英尺、码或英里的分段控件。
用于输出单位的米、公里、英尺、码或英里的第二个分段控件。
用户在其中输入数字的文本字段。
显示转换结果的文本视图。
因此,如果选择米作为源单位和英尺作为输出单位,然后输入 10,会看到 32.81 作为输出。


二、代码

import SwiftUI

struct ContentView: View {
    @State private var Number = ""
    @State private var choose = 1
    @State private var chosen1 = 0
    @State private var chosen2 = 0
    var changeTemperature: Double {
        let initialTemperature: Double
        let endTemperature: Double
        let inputTemperature = Double(Number) ?? 0
        
        if(chosen1 == 0)//Celsius
        {
            initialTemperature = inputTemperature
        } else if(chosen1 == 1) {//Fahrenheit
            initialTemperature = (inputTemperature - 32) / 1.8
        } else {//Kelvin
            initialTemperature = inputTemperature - 273.15
        }
        
        if(chosen2 == 0)
        {
            endTemperature = initialTemperature
        } else if(chosen2 == 1) {
            endTemperature = initialTemperature * 1.8 + 32
        } else {
            endTemperature = initialTemperature + 273.15
        }
        //Text
        return endTemperature
    }
    var changeLength: Double {
        let initialLength: Double
        let endLength: Double
        let inputLength = Double(Number) ?? 0
        
        if(chosen1 == 0) {//meters
            initialLength = inputLength
        } else if(chosen1 == 1) {//kilometers
            initialLength = inputLength * 1000
        } else if(chosen1 == 2) {//feet
            initialLength = inputLength / 3.280839
        } else if(chosen1 == 3)  {//yards
            initialLength = inputLength * 0.9144
        } else {//miles
            initialLength = inputLength * 1609.344
        }
        
        if(chosen2 == 0) {
            endLength = initialLength
        } else if(chosen2 == 1) {
            endLength = initialLength / 1000
        } else if(chosen2 == 2) {
            endLength = initialLength * 3.280839
        } else if(chosen2 == 3) {
            endLength = initialLength * 1.0936
        } else {
            endLength = initialLength * 0.000621
        }
        
        return endLength
    }
    var changeTime: Double {
        let initialTime: Double
        let endTime: Double
        let inputTime = Double(Number) ?? 0
        
        if(chosen1 == 0)//seconds
        {
            initialTime = inputTime
        } else if(chosen1 == 1) {//minutes
            initialTime = inputTime * 60
        } else if(chosen1 == 2) {//hours
            initialTime = inputTime * 3600
        } else {
            initialTime = inputTime * 3600 * 24
        }
        
        if(chosen2 == 0)
        {
            endTime = initialTime
        } else if(chosen2 == 1) {
            endTime = initialTime / 60
        } else if(chosen2 == 2) {
            endTime = initialTime / 3600
        } else {
            endTime = initialTime / 3600 / 24
        }
        
        return endTime
    }
    var changeVolume: Double {
        let initialVolume: Double
        let endVolume: Double
        let inputVolume = Double(Number) ?? 0
        
        if(chosen1 == 0) {//milliliters
            initialVolume = inputVolume
        } else if(chosen1 == 1) {//liters
            initialVolume = inputVolume * 1000
        } else if(chosen1 == 2) {//cups
            initialVolume = inputVolume * 250
        } else if(chosen1 == 3) {//pints
            initialVolume = inputVolume * 568.26125
        } else {//gallons
            initialVolume = inputVolume * 3785.411784
        }
        
        if(chosen2 == 0) {
            endVolume = initialVolume
        } else if(chosen2 == 1) {
            endVolume = initialVolume / 1000
        } else if(chosen2 == 2) {
            endVolume = initialVolume / 250
        } else if(chosen2 == 3) {
            endVolume = initialVolume / 568.26125
        } else {
            endVolume = initialVolume * 0.000264172
        }
        
        return endVolume
    }
    let Conversions = ["Temperature", "Length", "Time", "Volume"]
    let temperature = ["Celsius", "Fahrenheit", "Kelvin"]
    let length = ["Meters", "Kilometers", "Feet", "Yards", "Miles"]
    let time = ["Seconds", "Minutes", "Hours", "Days"]
    let volume = ["Millilitres", "Liters", "Cups", "Pints", "Gallons"]
    var body: some View {
        NavigationView {
            Form {
                Section(header: Text("Please choose what you want to convert")) {
                    Picker("Types", selection: $choose) {
                        ForEach(0 ..< Conversions.count) {
                            Text("\(Conversions[$0]) conversion")
                        }
                    }
                }
                
                Section(header: Text("Please choose the input unit"))
                {
                    if(choose == 0 )
                    {
                        Picker("Units", selection: $chosen1) {
                            ForEach(0 ..< temperature.count) {
                                Text("\(temperature[$0])")
                            }
                        }
                            .pickerStyle(SegmentedPickerStyle())
                    } else if(choose == 1) {
                        Picker("Units", selection: $chosen1) {
                            ForEach(0 ..< length.count) {
                                Text("\(length[$0])")
                            }
                        }
                            .pickerStyle(SegmentedPickerStyle())
                    } else if(choose == 2) {
                        Picker("Units", selection: $chosen1) {
                            ForEach(0 ..< time.count) {
                                Text("\(time[$0])")
                            }
                        }
                        .pickerStyle(SegmentedPickerStyle())
                    } else {
                        Picker("Units", selection: $chosen1) {
                            ForEach(0 ..< volume.count) {
                                Text("\(volume[$0])")
                            }
                        }
                        .pickerStyle(SegmentedPickerStyle())
                    }
                }
                
                Section(header: Text("Please enter the number")) {
                    TextField("Number", text: $Number)
                        .keyboardType(.decimalPad)
                }
                
                Section(header: Text("Please choose the output unit")) {
                    if(choose == 0 )
                    {
                        Picker("Units", selection: $chosen2) {
                            ForEach(0 ..< temperature.count) {
                                Text("\(temperature[$0])")
                            }
                        }
                            .pickerStyle(SegmentedPickerStyle())
                    } else if(choose == 1) {
                        Picker("Units", selection: $chosen2) {
                            ForEach(0 ..< length.count) {
                                Text("\(length[$0])")
                            }
                        }
                            .pickerStyle(SegmentedPickerStyle())
                    } else if(choose == 2) {
                        Picker("Units", selection: $chosen2) {
                            ForEach(0 ..< time.count) {
                                Text("\(time[$0])")
                            }
                        }
                        .pickerStyle(SegmentedPickerStyle())
                    } else {
                        Picker("Units", selection: $chosen2) {
                            ForEach(0 ..< volume.count) {
                                Text("\(volume[$0])")
                            }
                        }
                        .pickerStyle(SegmentedPickerStyle())
                    }
                }
                
                Section(header: Text("Result")) {
                    if(choose == 0) {
                        Text("\(changeTemperature, specifier: "%.2f")")
                    } else if(choose == 1) {
                        Text("\(changeLength, specifier: "%.2f")")
                    } else if(choose == 2) {
                        Text("\(changeTime, specifier: "%.2f")")
                    } else {
                        Text("\(changeVolume, specifier: "%.2f")")
                    }
                }
                
            }
            .navigationTitle("Unit Conversion")
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值