Поиск расстояния, валюты, единиц измерения температуры и т. Д. Для страны (iPhone) - PullRequest
23 голосов
/ 28 января 2010

Во время локализации моего приложения я просмотрел много документации, где-то, я уверен, я читал, что есть способ получить набор модулей, связанный с локалью.

Я полагаю, что это говорит что-то вроде "единицы, основанные на культурной ..." что-то.

Я хотел бы отобразить температуру и расстояние в градусах Фаренгейта и милях для некоторых стран и в градусах Цельсия и километрах для других стран.

Есть ли способ получить доступ к списку этих устройств в iPhone SDK.

Спасибо.

Ответы [ 5 ]

29 голосов
/ 28 января 2010

Вы можете использовать NSLocale для проверки денежной единицы, , но для метрической или имперской вам нужно составить список самостоятельно .

К сожалению. Вы можете проверить имперские и метрические показатели. Есть клавиши NSLocaleMeasurementSystem и NSLocaleUsesMetricSystem.

9 голосов
/ 05 мая 2014

Стоит отметить, что Apple предоставляет красивую библиотеку (MKDistanceFormatter, представленную в iOS 7) для автоматического представления CLLocationDistance в качестве соответствующей строки для локали и языка данного пользователя.

Он делает небольшое нечеткое округление (например, 300 футов -> 350 футов -> 400 футов), но хорошо конвертирует между единицами (например, футами -> милями, когда это необходимо). Если вам не требуются действительно точные значения, этот класс идеально подходит для возврата приблизительных оценок расстояний в две строки кода.

MKDistanceFormatter *distanceFormatter = [[MKDistanceFormatter alloc] init];
[distanceFormatter setUnitStyle:MKDistanceFormatterUnitStyleAbbreviated]; // Optional
NSString *formattedDistance = [distanceFormatter stringFromDistance:100];
NSLog(@"%@",formattedDistance); // Prints "350 ft"

https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKDistanceFormatter_class/Reference/Reference.html

8 голосов
/ 09 сентября 2014

Я просто хотел отметить, что, как и с выпуском iOS8 , будут новые NSFormatters по крайней мере для некоторых из упомянутых вами устройств.

Там будут NSLengthFormatter, NSMassFormatter и NSEnergyFormatter, которые очень просты в использовании - см. Это руководство по iOS8 NSFormatter . Вот пример использования NSLengthFormatter со swift:

let lengthFormatter = NSLengthFormatter()
println(@"Kilometer: %@", lengthFormatter.stringFromValue(1000, unit: .Kilometer))       //Kilometer: 1,000 km
2 голосов
/ 23 июля 2015

Swift:

1.)

import MapKit

2.) Поскольку создание форматтера стоит дорого, лучше установить его в качестве ленивого свойства. Таким образом, вы можете инициализировать модуль форматирования только тогда, когда это необходимо, и повторно использовать его, а не создавать новый.

lazy var distanceFormatter: MKDistanceFormatter = {
    var tempDistanceFormatter =  MKDistanceFormatter()
    tempDistanceFormatter.unitStyle = .Abbreviated // .abbreviated in Swift 3

    return tempDistanceFormatter
}()

3.)

let distanceString = self.distanceFormatter.stringFromDistance(yourDistance)
0 голосов
/ 07 сентября 2018

Я извлек этот метод в расширение String. Выглядит элегантно

Swift 4.1 версия

import MapKit

extension String {
    init(distance: Double ) {
        let mkDistanceFormatter = MKDistanceFormatter()
        mkDistanceFormatter.unitStyle = .abbreviated
        self = mkDistanceFormatter.string(fromDistance: distance)
    }
}

Использование

let distance = Double(34234.0)
let stringDistance String(distance:distance)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...