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