SwiftUI 列表格式化,用于格式化和显示数组中的元素为人类可读的列表。这种格式化方式使用的是 Foundation 提供的格式化工具,具体来说是通过 FormatStyle 和 ListFormatStyle 来实现的。
语法说明
format: .list(type: .and) 使用了 ListFormatStyle,它可以格式化集合(如数组)为一个自然语言列表。
构造方式
Text(resort.facilities, format: .list(type: .and))
resort.facilities:
一个数组,例如:[“WiFi”, “Pool”, “Gym”]。
.list(type: .and):
表示列表的格式化方式,其中 .and 表示用“和”连接(或者在其他语言中使用等效的“and”词汇)。
.list(type:) 的参数
.and:
用“和”连接列表的最后两个元素。
示例:
let facilities = ["WiFi", "Pool", "Gym"]
Text(facilities, format: .list(type: .and))
输出:
WiFi, Pool, and Gym
.or:
用“或”连接列表的最后两个元素。
示例:
let facilities = ["WiFi", "Pool", "Gym"]
Text(facilities, format: .list(type: .or))
完整示例
基础用法
struct ContentView: View {
let facilities = ["WiFi", "Pool", "Gym"]
var body: some View {
VStack {
Text(facilities, format: .list(type: .and))
Text(facilities, format: .list(type: .or))
}
}
}
输出结果:
WiFi, Pool, and Gym
WiFi, Pool, or Gym
适用数据类型
数组:例如 [“WiFi”, “Pool”, “Gym”]
集合:例如 Set([“WiFi”, “Pool”, “Gym”])
其他符合 Sequence 协议的类型
实际应用场景
1、展示酒店设施或功能
let facilities = ["WiFi", "Pool", "Spa"]
Text(facilities, format: .list(type: .and))
2、创建用户友好的错误提示
let errors = ["Invalid password", "Email not verified", "Username taken"]
Text(errors, format: .list(type: .or))
3、多语言支持
依赖设备语言和区域设置,生成自动本地化的输出。
优点
简洁:不需要手动拼接字符串或处理分隔符。
本地化:自动支持多语言和区域格式。
灵活:可选择不同的列表连接方式(.and, .or)。
总结
Text(resort.facilities, format: .list(type: .and)) 是一种优雅的方式,用于格式化数组为用户可读的自然语言列表。它不仅代码简洁,而且自动支持国际化,适合在现代 SwiftUI 项目中使用