如何使用MeasurementFormatter获取计量单位的单数名词形式?
iOS MeasurementFormatter 获取本地化单数单位的方法
可以实现,且完全复用系统自带的本地化单位资源,不需要自行维护多语言文案。
你之前直接对UnitLength实例调用格式化方法,系统默认按照复数场景处理,所以返回的是复数形式的单位。只要将单位和数值1绑定为Measurement实例再格式化,就能拿到正确的单数单位:
let measurementFormatter = MeasurementFormatter() measurementFormatter.unitStyle = .long // 可按需切换任意地区,自动适配对应语言的单复数规则 measurementFormatter.locale = Locale(identifier: "en_US") // 获取单数单位:kilometer let singleKmMeasurement = Measurement(value: 1, unit: UnitLength.kilometers) let singularUnit = measurementFormatter.string(from: singleKmMeasurement) .replacingOccurrences(of: "1 ", with: "") // 原本的复数单位获取逻辑依然可用:kilometers let pluralKmMeasurement = Measurement(value: 2, unit: UnitLength.kilometers) let pluralUnit = measurementFormatter.string(from: pluralKmMeasurement) .replacingOccurrences(of: "2 ", with: "")
旁白适配优化建议
如果是为了配速场景的VoiceOver朗读更自然,可以直接用MeasurementFormatter格式化完整的配速数值,系统会自动匹配正确的单位单复数和朗读逻辑,不需要手动拆分拼接单位:
// 示例:格式化5分钟每公里的配速 let paceMeasurement = Measurement(value: 5, unit: UnitSpeed.minutesPerKilometer) measurementFormatter.unitOptions = .naturalScale // 输出为 "5 minutes per kilometer",旁白可以直接正确朗读 let paceString = measurementFormatter.string(from: paceMeasurement)
内容的提问来源于stack exchange,提问作者phi
相关产品推荐
相关产品推荐

