在我的应用程序本地化期间,我浏览了很多文档,我确定我在某处读到有一种方法可以获得一组与区域设置相关的单元。
我相信它说的是“基于文化的单位……”之类的东西。
我想在某些国家/地区以华氏和英里显示温度和距离,在其他国家/地区以摄氏和公里显示温度和距离。
有没有办法在 iPhone SDK 中访问这些单元的列表。
谢谢。
在我的应用程序本地化期间,我浏览了很多文档,我确定我在某处读到有一种方法可以获得一组与区域设置相关的单元。
我相信它说的是“基于文化的单位……”之类的东西。
我想在某些国家/地区以华氏和英里显示温度和距离,在其他国家/地区以摄氏和公里显示温度和距离。
有没有办法在 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"
我只是想指出,随着iOS8NSFormatters
的发布,至少你提到的一些单元会有新的。
将会有NSLengthFormatter
,NSMassFormatter
并且NSEnergyFormatter
非常易于使用 - 请参阅这个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)