Trovare la distanza, valuta, unità di temperatura, ecc per un paese (iPhone)
-
23-09-2019 - |
Domanda
Durante la localizzazione della mia app ho passato un sacco di documentazione, da qualche parte sono sicuro ho letto che c'è un modo per ottenere un insieme di unità che è collegato con il locale.
Credo che ha detto qualcosa come "unità di base di cultura ..." qualcosa.
Vorrei visualizzare la temperatura e la distanza in gradi Fahrenheit e Miles per alcuni paesi e Celsius e chilometri per gli altri paesi.
C'è un modo per accedere a un elenco di queste unità in iPhone SDK.
Grazie te.
Soluzione
È possibile utilizzare NSLocale
per controllare l'unità monetaria, ma per imperiale vs. metrica è necessario fare una lista da soli .
Spiacenti. possono verificare la presenza imperiale vs. metrica. C'è sono NSLocaleMeasurementSystem
e NSLocaleUsesMetricSystem
chiavi.
Altri suggerimenti
Vale la pena ricordare che Apple fornisce una bella libreria (MKDistanceFormatter, introdotto in iOS 7) per presentare automaticamente un CLLocationDistance come la stringa appropriata per un determinato locale dell'utente e la lingua.
Si fa un po 'di arrotondamento sfocata (per esempio 300ft-> 350ft-> 400ft), ma che ben la conversione tra unità (ad esempio i piedi -> miglia, quando opportuno farlo). A meno che non si domanda valori davvero precisi, questa classe è ideale per la restituzione stime approssimative per distanze in due righe di codice.
MKDistanceFormatter *distanceFormatter = [[MKDistanceFormatter alloc] init];
[distanceFormatter setUnitStyle:MKDistanceFormatterUnitStyleAbbreviated]; // Optional
NSString *formattedDistance = [distanceFormatter stringFromDistance:100];
NSLog(@"%@",formattedDistance); // Prints "350 ft"
Volevo solo notare, che, come con il rilascio di iOS 8 ci saranno nuove NSFormatters
per almeno alcune delle unità che hai menzionato.
Ci saranno NSLengthFormatter
, NSMassFormatter
e NSEnergyFormatter
che sono molto facili da usare - vedere questo iOS 8 NSFormatter esercitazione . Ecco un esempio utilizzando il NSLengthFormatter con rapida:
let lengthFormatter = NSLengthFormatter()
println(@"Kilometer: %@", lengthFormatter.stringFromValue(1000, unit: .Kilometer)) //Kilometer: 1,000 km
Swift:
1).
import MapKit
2.) Dal momento che la creazione di formattazione è costoso, è meglio impostare formattatore come una proprietà pigro. In questo modo, è possibile inizializzare il formattatore solo quando è necessario e riutilizzare il formattatore piuttosto che crearne uno nuovo.
lazy var distanceFormatter: MKDistanceFormatter = {
var tempDistanceFormatter = MKDistanceFormatter()
tempDistanceFormatter.unitStyle = .Abbreviated // .abbreviated in Swift 3
return tempDistanceFormatter
}()
3).
let distanceString = self.distanceFormatter.stringFromDistance(yourDistance)
ho estratto questo metodo per estensione String. Sembra elegante
Swift 4.1 versione
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)