如何从测量中获取格式化的值和单位
问题描述:
我试图从测量中获取格式化的值,将单位作为两个单独的字符串。我已经写了下面的功能来做到这一点。我正在努力处理模板的扩展的函数格式。如何从测量中获取格式化的值和单位
这不起作用:
func getFormattedValueAndUnitFromMeasurement(measurement: Measurement<Unit>)
下面的作品,但后来我需要定义功能为每个单位类型。
func getFormattedValueAndUnitFromMeasurement(measurement: Measurement<UnitLength>)
这是我使用的代码。
var diameter: Measurement<UnitLength> = Measurement<UnitLength>(value: 13, unit: .inches)
let diameterFormatter = MeasurementFormatter()
diameterFormatter.unitStyle = .medium
diameterFormatter.unitOptions = .providedUnit // .natural
diameterFormatter.numberFormatter.generatesDecimalNumbers = true
diameterFormatter.numberFormatter.maximumFractionDigits = 1
// Get the formatted text for the value and the units
let diameterText = diameterFormatter.getFormattedValueAndUnitFromMeasurement(measurement: diameter)
extension MeasurementFormatter {
func getFormattedValueAndUnitFromMeasurement(measurement: Measurement<Unit>) -> (valueString: String, unitString: String)
{
// Number Formatter
let numberFormatter = self.numberFormatter
// This assumes the number is going to be displayed in the provided units. Ok for now
let numberString = numberFormatter?.string(from: NSNumber (value: measurement.value))
// Figure out just the units of the string
var units: String = self.string(for: measurement)!
if (units.hasPrefix(numberString!)) {
units.removeSubrange((numberString?.startIndex)! ..< (numberString?.index((numberString?.startIndex)!, offsetBy: (numberString?.characters.count)!))!)
}
return (numberString!, units)
}
}
答
Measurement<Unit>
和Measurement<UnitLength>
被认为是两种不同的类型,如String
和Int
。您应该使用泛型来处理所需的类型,例如
func getFormattedValueAndUnitFromMeasurement<T>(measurement: Measurement<T>)
-> (valueString: String, unitString: String)