如何知道用户是喜欢英里还是公里?

时间:2009-07-27 17:09:12

标签: iphone objective-c cocoa-touch

在我的应用程序中,我有几米的距离。

如果用户喜欢里程,我希望以千米为单位显示它,如果用户喜欢里程,则以英里显示。在第一种情况下,我想在末尾添加一个字符串“km”,在第二种情况下添加“miles”。

实现这一目标的最佳方法是什么?

感谢。

5 个答案:

答案 0 :(得分:14)

要确定用户是否使用指标,NSLocale可以告诉您:

- (BOOL)isMetric {
  return [[[NSLocale currentLocale] objectForKey:NSLocaleUsesMetricSystem] boolValue];
}

答案 1 :(得分:1)

您可以询问用户他们是偏好英里还是公里,是偏好还是某种东西。然后,只要你显示距离,你就会说。

伪伪代码

function distance(meters) {
    if (userPrefersKM) {
        return meters / 1000 + " kilometers";
    else if (userPrefersMiles) {
        return meters / METERS_IN_A_MILE + " miles";
}

METERS_IN_A_MILE约为1600,但你应该看一下。

答案 2 :(得分:1)

Swift 等同于Chris'答案是这样的:

func isMetric() -> Bool {
    return ((Locale.current as NSLocale).object(forKey: NSLocale.Key.usesMetricSystem) as? Bool) ?? true
}

请注意,在某些情况下,它默认为true。根据需要进行更改。

答案 3 :(得分:1)

在Swift中,redraw()给出了用户的期望。但是,如果使用detectChanges来为您处理,则不需要。

Locale.current.usesMetricSystem

当前语言环境决定了如何将其呈现给用户。要查看它在不同语言环境下的工作方式,请在Xcode Playground中尝试一下(例如英国和法国):

Measurement

答案 4 :(得分:0)

除非iPhone直接提供此信息,否则您必须拥有从区域设置到默认单元的查找表。然后,您应该允许用户覆盖该默认值。