如何将米和厘米转换为英尺和英寸,并在UILabel上显示它们

时间:2019-03-25 13:39:59

标签: swift

我有一个UISlider,值从0到8(米)。 我尝试从仪表转换为厘米,英尺,英寸,并在2个UILabel上显示此值。在一个标签中,我想要显示的值是:19 ft 10“,在另一个标签中,我想要显示的值是:6 m 4 cm。 我正在努力进行转换,也许有人可以帮助我显示此值。

这是我在“视图”中的代码:

protocol VehicleHeightCellDelegate {
    func vehicleHeightSliderValueChanged(_ slider: UISlider, _ feetsLabel: UILabel, _ metersLabel: UILabel)
}

class VehicleHeightCell: UITableViewCell {

    // Interface Links
    @IBOutlet weak var vehicleHeightSlider: UISlider!
    @IBOutlet weak var vehicleHeightFeetsLabel: UILabel!
    @IBOutlet weak var vehicleHeightMetersLabel: UILabel!

    // Properties
    var delegate: VehicleHeightCellDelegate?

@IBAction func vehicleHeightValueChanged(_ sender: UISlider) {

    delegate?.vehicleHeightSliderValueChanged(vehicleHeightSlider, vehicleHeightFeetsLabel, vehicleHeightMetersLabel)
    }
}

这是我在Controller中的代码:

extension ChecklistInspectionController: VehicleHeightCellDelegate{

    func vehicleHeightSliderValueChanged(_ slider: UISlider, _ feetsLabel: UILabel, _ metersLabel: UILabel) {

        let currentValue = Int(slider.value)

        let heightMeters = Measurement(value: Double(currentValue), unit: UnitLength.meters)
        let heightFeet = heightMeters.converted(to: UnitLength.feet)

        let heightCentimeters = heightMeters.converted(to: UnitLength.centimeters)
        let heightInches = heightMeters.converted(to: UnitLength.inches)


        feetsLabel.text = "\(heightFeet)" + " \(heightInches)"
        metersLabel.text = "\(heightMeters)" + " \(heightCentimeters)"
    }
}

结果需要如下所示:

enter image description here

此刻看起来像这样: enter image description here

谢谢您阅读!

4 个答案:

答案 0 :(得分:0)

您将要使用MeasurementFormatter。您可以使用它的numberFormatter属性来配置显示数字部分的方式,这样就可以删除小数点。

如果将unitOptions设置为.naturalScale,则可能会得到所需的样式。

Here's a link to the class reference.

答案 1 :(得分:0)

如果要分别显示值,则必须四舍五入结果并提取小数部分并转换。

这是您达到目标的方法:

ws.Range("A2:N" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row)

编辑:

  

您可以使用 舍入 代替 ceil 自动舍入到最接近的整数,或者您可以< strong> 仅舍入小数部分 (或 截断 任意数量的小数部分)以具有小数位数例如 “ 6 m and 7.12 cm” “ 12 ft and 11.4 inch”

答案 2 :(得分:0)

以下是将英尺转换为米的代码段:

return Measurement(value: ft, unit: UnitLength.feet).converted(to: .meters).value

如上述建议的答案,请参见文档以了解所有选项

答案 3 :(得分:0)

我这样做是为了保持简单:

扩展ChecklistInspectionController:VehicleHeightCellDelegate {

func vehicleHeightSliderValueChanged(_ slider: UISlider, _ feetsLabel: UILabel, _ metersLabel: UILabel) {

    let currentValue = Int(slider.value)
    let meters = currentValue / 100
    let centimeters = currentValue % 100
    let inches = currentValue < 3 ? 0 : round(Double(currentValue) / 2.54)
    let feet = round(inches / 12)
    let inch = round(inches.truncatingRemainder(dividingBy: 12))

    feetsLabel.text = "\(feet) ft" + " \(inch)\""
    metersLabel.text = "\(meters) m" + " \(centimeters) cm"

    print("\(meters) m \(centimeters) cm")
    print("\(feet) ft \(inch) \"") 
}

}

结果:

enter image description here