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

问题描述 投票:10回答:5

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

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

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

谢谢。

iphone objective-c cocoa-touch
5个回答
14
投票

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

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

2
投票

斯威夫特相当于克里斯的回答是这样的:

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

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


1
投票

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

在伪c代码中

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

METERS_IN_A_MILE大约1600,但你应该看看。


1
投票

在Swift中,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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.