在我的应用程序的本地化过程中,我经历了很多文档,在某处我确定我读到有一种方法可以获得一组与语言环境相关联的单元。
我相信它说的是“基于文化......的单位”之类的东西。
我想显示一些国家的华氏温度和里程数的温度和距离以及其他国家的摄氏温度和公里数。
有没有办法在iPhone SDK中访问这些单位的列表。
谢谢。
你可以使用NSLocale
来检查货币单位,
但对于帝国与公制,你需要自己制作一份清单
。
哎呀。您可以检查英制与公制。有NSLocaleMeasurementSystem
和NSLocaleUsesMetricSystem
键。
值得一提的是,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"
我只想注意一点,就像iOS8的发布一样,至少有一些你提到的单位会有新的NSFormatters
。
将有NSLengthFormatter
,NSMassFormatter
和NSEnergyFormatter
非常容易使用 - 请参阅此iOS8 NSFormatter tutorial。以下是使用带有swift的NSLengthFormatter的示例:
let lengthFormatter = NSLengthFormatter()
println(@"Kilometer: %@", lengthFormatter.stringFromValue(1000, unit: .Kilometer)) //Kilometer: 1,000 km
迅速:
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)
我已将此方法提取到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)