我一直在使用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