MeasurementFormatter显示英尺和英寸

jja*_*tie 7 formatter ios swift measurementformatter

我一直在玩,MeasurementFormatter试图显示英制10"6'10 ft 6 in不成功的长度.设置LengthFormatter为时会正确执行此操作,但它不能很好地适应用户的区域设置(即,以度量为单位测量长度的国家/地区除外,指的是高度).有没有办法在格式化程序中强制执行此行为?isForPersonHeightUsetrue

编辑问题是确定如何选择测量单位.我可以选择英尺或英寸,但希望显示小数英尺,如:6'3"而不是6.25英尺.

mas*_*vsa 3

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)
    }

}
Run Code Online (Sandbox Code Playgroud)

使用示例:

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

    let b = Measurement(value: 1.5, unit: UnitLength.feet)
    print(b.heightOnFeetsAndInches ?? "")
Run Code Online (Sandbox Code Playgroud)

将打印:

6 ft, 4.08 in
1 ft, 6 in
Run Code Online (Sandbox Code Playgroud)