Encontrando a distância, moeda, unidades de temperatura etc. para um país (iPhone)
-
23-09-2019 - |
Pergunta
Durante a localização do meu aplicativo, passei por muita documentação, em algum lugar tenho certeza de que li que existe uma maneira de obter um conjunto de unidades vinculadas ao local.
Eu acredito que disse algo como "unidades baseadas em cultura ..." alguma coisa.
Eu gostaria de exibir temperatura e distância em Fahrenheit e milhas para alguns países e Celsius e quilômetros para outros países.
Existe uma maneira de acessar uma lista dessas unidades no iPhone SDK.
Te agradece.
Solução
Você pode usar NSLocale
Para verificar a unidade de moeda, Mas para imperial vs. métrica, você precisa fazer uma lista.
Opa. Você posso Verifique a métrica imperial vs.. Existem NSLocaleMeasurementSystem
e NSLocaleUsesMetricSystem
chaves.
Outras dicas
Vale ressaltar que a Apple fornece uma boa biblioteca (MKDistanceFormatter, introduzida no iOS 7) para apresentar automaticamente uma distância de cllocation como a sequência apropriada para o local e o idioma de um determinado usuário.
Ele faz um pouco de arredondamento difuso (por exemplo, 300 pés-> 350ft-> 400 pés), mas converte bem entre as unidades (por exemplo, pés-> milhas, quando apropriado para fazê-lo). A menos que você exija valores realmente precisos, essa classe é perfeita para retornar estimativas aproximadas para distâncias em duas linhas de código.
MKDistanceFormatter *distanceFormatter = [[MKDistanceFormatter alloc] init];
[distanceFormatter setUnitStyle:MKDistanceFormatterUnitStyleAbbreviated]; // Optional
NSString *formattedDistance = [distanceFormatter stringFromDistance:100];
NSLog(@"%@",formattedDistance); // Prints "350 ft"
Eu só queria notar que, como no lançamento de iOS8 Haverá novo NSFormatters
Para pelo menos algumas das unidades que você mencionou.
Haverá NSLengthFormatter
, NSMassFormatter
e NSEnergyFormatter
que são muito fáceis de usar - veja isso Tutorial do IOS8 NSFormatter. Aqui está um exemplo usando o NSLENCIMEFORMATTER com SWIFT:
let lengthFormatter = NSLengthFormatter()
println(@"Kilometer: %@", lengthFormatter.stringFromValue(1000, unit: .Kilometer)) //Kilometer: 1,000 km
Rápido:
1.)
import MapKit
2.) Como a criação do formatador é cara, é melhor definir o formatador como uma propriedade preguiçosa. Ao fazer isso, você pode inicializar o formatador somente quando for necessário e reutilizar o formatador, em vez de criar um novo.
lazy var distanceFormatter: MKDistanceFormatter = {
var tempDistanceFormatter = MKDistanceFormatter()
tempDistanceFormatter.unitStyle = .Abbreviated // .abbreviated in Swift 3
return tempDistanceFormatter
}()
3.)
let distanceString = self.distanceFormatter.stringFromDistance(yourDistance)
Eu extrai esse método para a extensão da string. Parece elegante
Versão Swift 4.1
import MapKit
extension String {
init(distance: Double ) {
let mkDistanceFormatter = MKDistanceFormatter()
mkDistanceFormatter.unitStyle = .abbreviated
self = mkDistanceFormatter.string(fromDistance: distance)
}
}
Uso
let distance = Double(34234.0)
let stringDistance String(distance:distance)