将距离测量格式设置为千米或英制英里,而不是公制英里
Format distance measurement as either kilometers or imperial miles, not metric miles
我正在尝试以公里或英里为单位格式化 Measurement<UnitLength>
,但如果度量单位为 > 10 km
并且区域设置合适,则不会 Scandinavian miles。
我想使用 Swift 和 Foundation 的新 .formatted
API 但没有找到合适的文档来调整单位样式。
简而言之,我想像下面的例子一样展示距离:
- 如果以英里显示,则显示
3.5 mi
- 如果以公里显示,显示
7.1 km
- 如果以公里显示但超过 10 公里,则显示
13.5 km
,现在显示(在瑞典语言环境中)1.4 mil
我在 SwiftUI 中使用以下代码来格式化距离文本
Text(distance.formatted(.measurement(width: .abbreviated, usage: .road)))
这是我用来说明问题的一些测试代码:
import SwiftUI
struct TestView: View {
@Environment(\.locale) var locale
private let distance1 = Measurement(value: 7.04765, unit: UnitLength.kilometers)
private let distance2 = Measurement(value: 13.4657, unit: UnitLength.kilometers)
var body: some View {
VStack {
Text(distance1.formatted(.measurement(width: .abbreviated, usage: .road).locale(locale)))
Text(distance2.formatted(.measurement(width: .abbreviated, usage: .road).locale(locale)))
}
}
}
struct TestView_Previews: PreviewProvider {
static var previews: some View {
Group {
TestView() // Swedish
.environment(\.locale, .init(identifier: "sv_SE"))
TestView() // American English
.environment(\.locale, .init(identifier: "en_US"))
TestView() // French
.environment(\.locale, .init(identifier: "fr_FR"))
}
.previewLayout(.sizeThatFits)
.padding()
}
}
此代码生成以下内容:
.general
而不是 .road
将根据区域设置为您提供千米或英里。 .asProvided
将为您提供原始测量中定义的单位。
我认为 .general
让你最接近你想要的,尽管它最终可能会给你非公里范围值的米或码。
我正在尝试以公里或英里为单位格式化 Measurement<UnitLength>
,但如果度量单位为 > 10 km
并且区域设置合适,则不会 Scandinavian miles。
我想使用 Swift 和 Foundation 的新 .formatted
API 但没有找到合适的文档来调整单位样式。
简而言之,我想像下面的例子一样展示距离:
- 如果以英里显示,则显示
3.5 mi
- 如果以公里显示,显示
7.1 km
- 如果以公里显示但超过 10 公里,则显示
13.5 km
,现在显示(在瑞典语言环境中)1.4 mil
我在 SwiftUI 中使用以下代码来格式化距离文本
Text(distance.formatted(.measurement(width: .abbreviated, usage: .road)))
这是我用来说明问题的一些测试代码:
import SwiftUI
struct TestView: View {
@Environment(\.locale) var locale
private let distance1 = Measurement(value: 7.04765, unit: UnitLength.kilometers)
private let distance2 = Measurement(value: 13.4657, unit: UnitLength.kilometers)
var body: some View {
VStack {
Text(distance1.formatted(.measurement(width: .abbreviated, usage: .road).locale(locale)))
Text(distance2.formatted(.measurement(width: .abbreviated, usage: .road).locale(locale)))
}
}
}
struct TestView_Previews: PreviewProvider {
static var previews: some View {
Group {
TestView() // Swedish
.environment(\.locale, .init(identifier: "sv_SE"))
TestView() // American English
.environment(\.locale, .init(identifier: "en_US"))
TestView() // French
.environment(\.locale, .init(identifier: "fr_FR"))
}
.previewLayout(.sizeThatFits)
.padding()
}
}
此代码生成以下内容:
.general
而不是 .road
将根据区域设置为您提供千米或英里。 .asProvided
将为您提供原始测量中定义的单位。
我认为 .general
让你最接近你想要的,尽管它最终可能会给你非公里范围值的米或码。