区域设置感知的格式化
根据区域设置格式化数字、日期和货币。
区域设置感知的格式化 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。
数字并非放之四海而皆准
数字一百二十万在美国写作 1,200,000.50,在德国写作 1.200.000,50,在印度写作 12,00,000.50。硬编码分隔符或格式会导致大多数地区显示错误。Swift 的 FormatStyle API 会根据每个 locale 正确处理这些差异。
import Foundation
let value = 1_200_000.5
print(value.formatted()) // uses current localeformatted() 入口
大多数标准类型——数字、日期、测量值和列表——都有 formatted() 方法。不传参数时,它会使用合理的、符合 locale 的默认设置;传入 style 即可进行自定义。
import Foundation
let n = 1234.567
print(n.formatted()) // default
print(n.formatted(.number.precision(.fractionLength(2))))数字样式
.number 是最常用的工具。您可以流畅地配置分组、分数位数、舍入和符号显示。实际使用的分隔符字符仍由 locale 控制。
import Foundation
let x = 1234.5
print(x.formatted(
.number
.grouping(.automatic)
.precision(.fractionLength(0...2))))货币格式化
对于金额,.currency(code:) 会根据 locale 正确放置符号、分组和小数位。同一 amount 根据用户所在地区可能显示为 $1,200.00 或 1.200,00 €€,请不要手动拼接货币字符串。
import Foundation
let price = 1200.0
print(price.formatted(.currency(code: "USD")))
print(price.formatted(.currency(code: "EUR")))
print(price.formatted(.currency(code: "JPY")))百分比格式化
.percent 会将数值乘以 100,并附加 locale 的百分号,同时处理某些语言要求数字与符号之间添加空格的规则。
import Foundation
let ratio = 0.875
print(ratio.formatted(.percent))
print(ratio.formatted(.percent.precision(.fractionLength(1))))覆盖 locale
默认情况下,格式化使用 Locale.current。如果要强制使用特定 locale(用于测试,或在固定地区显示数值),可以将 .locale(_:) 链接到任意 style 上。
import Foundation
let value = 1234567.89
let german = Locale(identifier: "de_DE")
print(value.formatted(.number.locale(german)))
// 1.234.567,89日期格式化
日期有自己的样式。.dateTime 允许您组合所需的字段(year、month、day、hour),系统会根据 locale 对它们排序:美国使用月-日-年,欧洲大部分地区使用日-月-年。
import Foundation
let now = Date()
print(now.formatted(
.dateTime.year().month().day()))
print(now.formatted(date: .long, time: .shortened))相对日期
RelativeDateTimeFormatter 和 .relative style 可以生成“2 小时前”或“3 天后”之类的短语,并完整翻译成对应语言。这非常适合动态信息流和时间戳。
import Foundation
let past = Date().addingTimeInterval(-3600)
let text = past.formatted(
.relative(presentation: .named))
print(text) // e.g. "1 hour ago"测量值和单位
Measurement 可以格式化物理量并转换单位。locale 决定显示千米还是英里,而 style 会将单位名称本身本地化。
import Foundation
let distance = Measurement(value: 5, unit: UnitLength.kilometers)
print(distance.formatted())
print(distance.formatted(
.measurement(width: .wide)))列表和名称
即使是连接列表项也会遵循语言规则。.list(type:) 在英语中会生成 apples, oranges, and pears,在其他语言中则使用正确的连接词和分隔符——请避免手动插入逗号和“and”一词。
import Foundation
let fruits = ["apples", "oranges", "pears"]
print(fruits.formatted(.list(type: .and)))
print(fruits.formatted(.list(type: .or)))解析回来
FormatStyles 是可逆的。style 的 parseStrategy(或者使用该 style 从字符串初始化值)可以将本地化文本转换回数字或日期,并遵循相同的 locale 规则。
import Foundation
let style = Decimal.FormatStyle.Currency(code: "USD")
let amount = try? Decimal("$1,234.50", format: style)
print(amount ?? 0)快速检查
回顾处理金额的正确工具。
回顾
您学会了通过 FormatStyle 进行符合 locale 的格式化:
formatted()提供符合 locale 的默认格式;传入 style 即可自定义。.number、.currency(code:)、.percent、.dateTime、.relative、.measurement和.list可以满足大多数需求。- 将
.locale(_:)链接起来即可覆盖地区;style 也可以将文本解析回来。 - 不要手动构建分隔符、货币符号或日期顺序。
常见问题解答
「区域设置感知的格式化」课时是免费的吗?
是的 — 「区域设置感知的格式化」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。
「区域设置感知的格式化」这节课中我会学到什么?
根据区域设置格式化数字、日期和货币。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Swift Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「区域设置感知的格式化」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Swift Academy 课中编写并运行代码吗?
能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 字符串目录与本地化字符串
- 复数形式与 Stringsdict
- 区域设置感知的格式化
- 从右到左与布局方向