SwiftUI格式化数据
SwiftUI格式化数据

SwiftUI格式化数据

SwiftUI 中,类似 Text(resort.facilities, format: .list(type: .and)) 这样格式化数据为自然语言输出的方法或功能,通常是基于 FormatStyle 系统扩展的。这些功能帮助开发者将数据类型直接转换为用户友好的文本,避免手动拼接字符串,并且支持国际化和区域设置。

1、数字格式化:NumberFormatStyle

用于格式化数字,例如货币、百分比、小数等。

示例

Text(123456.789, format: .number.precision(.fractionLength(2)))
// 输出: "123,456.79"

Text(0.45, format: .percent)
// 输出: "45%"

Text(9999, format: .currency(code: "USD"))
// 输出: "$9,999.00" (根据设备区域设置可能有所不同)

用途

显示货币金额(currency)

显示百分比(percent)

设置数字精度(precision)

2、日期和时间格式化:DateFormatStyle

用于将 Date 格式化为用户友好的日期字符串。

示例

Text(Date(), format: .dateTime.year().month().day())
// 输出: "2024年12月23日" (基于设备语言)

Text(Date(), format: .dateTime.hour().minute())
// 输出: "15:30"

Text(Date(), format: .dateTime.weekday().hour().minute())
// 输出: "Monday 15:30" (或中文 "周一 15:30")

用途

显示日期和时间(dateTime)

显示特定组件(如年、月、日、时、分)

国际化日期显示

3、测量值格式化:MeasurementFormatStyle

格式化物理测量值,如距离、重量、温度等。

示例

let distance = Measurement(value: 42, unit: UnitLength.kilometers)
Text(distance, format: .measurement(width: .abbreviated))
// 输出: "42 km"

let temperature = Measurement(value: 25, unit: UnitTemperature.celsius)
Text(temperature, format: .measurement(width: .narrow))
// 输出: "25°C"

用途

显示距离(UnitLength)

显示温度(UnitTemperature)

显示重量(UnitMass)

4、列表格式化:ListFormatStyle

格式化数组或集合为自然语言列表。

示例

let items = ["Apples", "Oranges", "Bananas"]
Text(items, format: .list(type: .and))
// 输出: "Apples, Oranges, and Bananas"

5、字符串格式化:LocalizedStringKey

支持本地化字符串和动态占位符替换。

示例

Text("Hello, \(name)! Welcome to \(place).")
// 输出: "Hello, John! Welcome to New York."

// 本地化版本可能输出:
// "你好,John!欢迎来到纽约。"

6、比率和分数格式化:FractionFormatStyle

用于以分数表示数字。

示例

Text(0.75, format: .number.notation(.fraction))
// 输出: "3/4"

Text(1.2, format: .number.notation(.scientific))
// 输出: "1.2E0"

7、动态区间格式化:RangeFormatStyle

用于格式化数值区间。

示例

let range = 1...10
Text(range, format: .number)
// 输出: "1–10"

8、数据大小格式化:ByteCountFormatStyle

用于显示文件或数据大小。

示例

let fileSize = 10485760
Text(fileSize, format: .byteCount(style: .file))
// 输出: "10 MB"

用途

显示存储大小

支持不同单位(KB、MB、GB 等)

9、时间间隔格式化:RelativeDateTimeFormatter

格式化时间间隔为自然语言描述。

示例

Text(Date.now, format: .relative(presentation: .numeric))
// 输出: "5 minutes ago" 或 "5分钟前"

Text(Date.now.addingTimeInterval(-3600), format: .relative(presentation: .named))
// 输出: "1 hour ago" 或 "1小时前"

10、自定义格式化器:CustomFormatStyle

可以根据需求创建自己的格式化器。

示例

struct ReverseStringFormatStyle: FormatStyle {
    func format(_ value: String) -> String {
        String(value.reversed())
    }
}

extension FormatStyle where Self == ReverseStringFormatStyle {
    static var reverse: ReverseStringFormatStyle { ReverseStringFormatStyle() }
}

Text("Swift", format: .reverse)
// 输出: "tfiwS"

总结

Swift 的格式化工具种类丰富,涵盖了数字、日期、列表、测量值等常见需求。选择合适的格式化器不仅能简化代码,还能提高可读性和用户体验,同时保证国际化支持。

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注