2016-10-04 1 views
0

これはquestion I asked yesterdayに似ていますが、私が得た答えはこの場合にはうまくいかないようです。MeasurementFormatterでユニットを選択する

コアの場所から標高値をメートル単位で取得しています。私はこれらをローカライズされた形式で表示したい。一例として、現在の高度は標高1839mです。これは6033フィートとして表示されます。 MeasurementFormatterでできることは "1.143 mi"です。

let meters : Double = 1839 
let metersMeasurement = Measurement(value: meters, unit: UnitLength.meters) 

let measurementFormatter = MeasurementFormatter() 
measurementFormatter.locale = Locale(identifier: "en_US") 

let localizedString = measurementFormatter.string(from: metersMeasurement) 

私の前の質問に答えたオプションはここでは役に立ちません。私はこれがフレームワークの限界だと思っていますが、今のところ回避策があるのだろうかと思います。

答えて

1

メートル単位をフィートに変換するDouble拡張を作成するだけです。それからちょうど、必要に応じてそれを表示するためにMeasurementFormatterを使用します。

extension Double { 
    var metersToFeet: Double { 
     return Measurement(value: self, unit: UnitLength.meters).converted(to: UnitLength.feet).value 
    } 
} 

遊び場

let measurementFormatter = MeasurementFormatter() 
measurementFormatter.locale = Locale(identifier: "en_US") 
measurementFormatter.unitOptions = .providedUnit 
measurementFormatter.numberFormatter.maximumFractionDigits = 0 
measurementFormatter.unitStyle = .long 

let meters: Double = 1839 
let localizedString = measurementFormatter.string(from: Measurement(value: meters.metersToFeet, unit: UnitLength.feet)) 

localizedString // // "6,033 feet" 
2

私は正しいと思います。この種のコンテキストを指定する方法はありません。

文化的には標高を測定する方法が他にもあるかもしれませんが、これはマイルとキロメートルよりも優れているようです。

関連する問題