2016-10-03 7 views
0

新しいMeasurementFormatterクラスを取得して、適切な単位で結果を得ることができません。私は、ユーザーのロケールに応じて、メートルまたはフィートのいずれかのローカライズされた文字列で表示したい値をメートル単位で持っています。MeasurementFormatterを使用してメートルをフィートで表示する

私はこれを持っている:

これは私に "0.006mi" の文字列を与える
let meters : Double = 10 
let metersMeasurement = Measurement(value: meters, unit: UnitLength.meters) 

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

let localizedString = measurementFormatter.string(from: metersMeasurement) 

。それは正しいと思いますが、10メートルをマイルに変換するのはばかげています。私が欲しいのは「32.8ft」です。

MeasurementFormatter.providedUnitオプションは役に立ちません。これは私にメートルで結果を与えます。

私は現在のロケールを検索して自分自身で処理することができますが、これはちょうどMeasurementFormatterが不要と思われるものです。私に必要なことをさせるための方法がありますか?

+1

単位フォーマッタで「naturalScale」オプションを設定するhttps://developer.apple.com/reference/foundation/measurementformatter.unitoptions/1642065-naturalscale – Paulw11

+0

ナチュラルスケールのほかに、数値フォーマッタの最大桁数を1に設定する必要があります。 'measurementFormatter .nu​​mberFormatter.maximumFractionDigits = 1' –

+0

@LeoDabusこれはオプションです。 – rmaddy

答えて

0

あなたは、フォーマッタのunitOptionsnaturalScaleに設定する必要があります

let measurementFormatter = MeasurementFormatter() 
measurementFormatter.unitOptions = .naturalScale 

そして、あなたはどのロケール内のすべてのユーザーが特定のロケールで値を表示したい場合にのみ、ロケールを設定する必要があります。

+0

私のロケールは私の質問にロケールを含んでいました。私のロケールが私のものと違っているときにコードを使用しようとしました。私はデモのためにアメリカのユニットを強制したかったのです。 –

+0

私はまた、この答えが適用されないこの質問の少し異なるバージョンを持っています。たぶんあなたは[それを見て](http://stackoverflow.com/questions/39858828/choosing-units-with-measurementformatter)できますか? –

関連する問題