在我的应用程序中,我有一定的距离以米为单位。
如果用户喜欢千米,我想以千米为单位显示它,并且如果用户喜欢英里,则以英里为单位显示它。在第一种情况下,我想在字符串末尾添加“千米”,而在第二种情况下则添加“英里”。
实现此目标的最佳方法是什么?
谢谢。
如果用户喜欢千米,我想以千米为单位显示它,并且如果用户喜欢英里,则以英里为单位显示它。在第一种情况下,我想在字符串末尾添加“千米”,而在第二种情况下则添加“英里”。
实现此目标的最佳方法是什么?
谢谢。
为确定用户是否使用公制,可以使用NSLocale:
- (BOOL)isMetric {
return [[[NSLocale currentLocale] objectForKey:NSLocaleUsesMetricSystem] boolValue];
}
Swift中对Chris的答案的等效形式可能是这样的:
func isMetric() -> Bool {
return ((Locale.current as NSLocale).object(forKey: NSLocale.Key.usesMetricSystem) as? Bool) ?? true
}
true
。根据需要进行更改。function distance(meters) {
if (userPrefersKM) {
return meters / 1000 + " kilometers";
else if (userPrefersMiles) {
return meters / METERS_IN_A_MILE + " miles";
}
METERS_IN_A_MILE
大约为 1600,但您应该查一下。
Locale.current.usesMetricSystem
可以获取用户的期望值。但是如果您使用Measurement
,则不需要这样做,因为它会自动处理。let distanceInMeters: Double = 2353.45
let formatter = MeasurementFormatter()
formatter.unitStyle = .medium // adjust according to your need
let distance = Measurement(value: distanceInMeters, unit: UnitLength.meters)
formatter.string(from: distance)
当前区域设置决定了向用户呈现的方式。为了查看不同区域设置下的效果,请在Xcode Playground中尝试以下操作(示例为英国和法国):
let distanceInMeters: Double = 2353.45
let formatter = MeasurementFormatter()
formatter.unitStyle = .medium // adjust according to your need
let distance = Measurement(value: distanceInMeters, unit: UnitLength.meters)
formatter.locale = Locale(identifier: "en_UK")
formatter.string(from: distance) // 1.462 mi
formatter.locale = Locale(identifier: "en_FR")
formatter.string(from: distance) // 2,353 km
MeasurementFormatter
获取单位,除非您解析字符串(这可能会在某些使用特殊数字的语言环境(如“ar”)中出现错误)。请注意,对于en-UK
,formatter.string(from: UnitLength.meters)
将输出metres
,因为它只是“翻译”单位而不是将其转换为首选单位。 - Daniel除非iPhone直接提供这些信息,否则您必须拥有一个从本地设置到默认单位的查找表。然后,您应该允许用户覆盖该默认值。