我一直在使用MeasurementFormatter尝试将英制长度显示为10'6"10 ft 6 in失败。当LengthFormatter设置为isForPersonHeightUse时,true可以正确执行此操作,但是它不能很好地适应用户的语言环境(即,以公制为单位测量长度的国家/地区,但指的是高度除外)。有什么办法可以在格式化程序中强制执行此操作?
编辑
question用于确定如何选择测量单位。我可以选择英尺或英寸,但想要以英寸为单位显示小数英尺,例如:6'3“,而不是6.25 ft。

最佳答案

public struct LengthFormatters {

    public static let imperialLengthFormatter: LengthFormatter = {
        let formatter = LengthFormatter()
        formatter.isForPersonHeightUse = true
        return formatter
    }()

}

extension Measurement where UnitType : UnitLength {

    var heightOnFeetsAndInches: String? {
        guard let measurement = self as? Measurement<UnitLength> else {
            return nil
        }
        let meters = measurement.converted(to: .meters).value
        LengthFormatters.imperialLengthFormatter.string(fromMeters: meters)
    }

}

使用示例:
    let a = Measurement(value: 6.34, unit: UnitLength.feet)
    print(a.heightOnFeetsAndInches ?? "")

    let b = Measurement(value: 1.5, unit: UnitLength.feet)
    print(b.heightOnFeetsAndInches ?? "")

将打印:
6 ft, 4.08 in
1 ft, 6 in

10-04 10:41