在我的应用程序的本地化过程中,我浏览了很多文档,我确信我在某个地方读到有一种方法可以获取一组与区域设置链接的单元。

我相信它说了类似“基于文化的单位……”之类的东西。

我想以华氏度和英里为单位显示某些国家的温度和距离,以摄氏和公里为其他国家的温度和距离。

有没有办法访问 iPhone SDK 中这些单位的列表。

感谢您。

有帮助吗?

解决方案

您可以使用NSLocale检查货币单位,但对于科举与公制,你需要让自己的列表

糟糕。您的可以的检查帝国与度量。有是NSLocaleMeasurementSystemNSLocaleUsesMetricSystem密钥。

其他提示

值得一提的是苹果提供了一个很好的库(MKDistanceFormatter,在IOS 7引入)来自动呈现CLLocationDistance作为给定用户的语言环境和语言适当的字符串。

它确实有点模糊的舍入(例如300ft-> 350ft->400英尺),但是单元之间没有很好地转换(例如脚 - >英里,在适当的时候这样做)。除非你真的需要精确值,这个类是完美的回归粗略估计在两行代码的距离。

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

https://developer.apple。 COM /库/ IOS /文档/ MapKit /参考/ MKDistanceFormatter_class /参考/的reference.html

我只是想指出,就像发布一样 iOS8 将会有新的 NSFormatters 至少对于您提到的某些单位。

将有 NSLengthFormatter, NSMassFormatterNSEnergyFormatter 非常容易使用 – 请参阅此 iOS8 NSFormatter 教程. 。下面是一个使用 NSLengthFormatter 和 swift 的例子:

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)

我已提取此方法以字符串扩展。看起来雅致

夫特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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top