2016-11-26 21 views
1

測定値から値を取得しようとしていますが、単位は2つの別々の文字列として取得しようとしています。私はこれを行うために以下の関数を書いた。私はテンプレートを扱う拡張機能の関数形式に苦労しています。測定値からフォーマットされた値と単位を取得する方法

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

答えて

0

Measurement<Unit>Measurement<UnitLength>StringIntのように、二つの異なるタイプと見なされます。あなたは、目的のタイプを扱うためにジェネリックスを使うべきです。

func getFormattedValueAndUnitFromMeasurement<T>(measurement: Measurement<T>)  
               -> (valueString: String, unitString: String) 
関連する問題