在我的应用程序中,我有几米的距离。
如果用户喜欢里程,我希望以千米为单位显示它,如果用户喜欢里程,则以英里显示。在第一种情况下,我想在末尾添加一个字符串“km”,在第二种情况下添加“miles”。
实现这一目标的最佳方法是什么?
感谢。
答案 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直接提供此信息,否则您必须拥有从区域设置到默认单元的查找表。然后,您应该允许用户覆盖该默认值。