在Swift(iOS/macOS)中处理CSV:SwiftCSV库与解析基础
CSV(逗号分隔值)是最流行的表格数据存储格式之一。在Apple生态系统(iOS、macOS)中,处理CSV文件通常用于从外部源导入数据、导出报告或加载配置。本文将介绍SwiftCSV库——一个轻量级且便捷的Swift CSV解析解决方案,以及无需第三方依赖即可处理该格式的基本示例。
什么是SwiftCSV?
SwiftCSV是一个开源的Swift库,可以轻松读取和处理CSV文件。它支持字符串解析和文件处理,自动检测分隔符(逗号、制表符、分号),并提供便捷的API来访问行、列和单个单元格。
主要功能:
- 从字符串、Data或URL(本地或远程)解析CSV。
- 支持列标题(第一行作为键)。
- 处理嵌套引号和转义字符。
- 可选择分隔符(逗号、制表符、自定义)。
- 最少的依赖项(纯Swift)。
安装SwiftCSV
通过Swift Package Manager(SPM)添加库:
- 在Xcode中选择
File → Add Packages...。 - 粘贴仓库URL:
https://github.com/swiftcsv/SwiftCSV.git。 - 选择版本(建议使用最新稳定版)。
- 将包添加到您的目标中。
或者在Package.swift中添加:
dependencies: [ .package(url: "https://github.com/swiftcsv/SwiftCSV.git", from: "0.9.0")]基本示例:从字符串读取CSV
假设我们有一个包含用户数据的CSV字符串:
let csvString = """name,age,cityAlice,30,New YorkBob,25,Los AngelesCharlie,35,Chicago"""使用SwiftCSV解析它:
import SwiftCSV
do { let csv = try CSV(string: csvString) // 以字典形式访问行(键为标题) for row in csv.rows { if let name = row["name"], let age = row["age"], let city = row["city"] { print("\\(name) (\\(age)岁) 住在 \\(city)") } }} catch { print("解析错误:\\(error)")}输出:
Alice (30岁) 住在 New YorkBob (25岁) 住在 Los AngelesCharlie (35岁) 住在 Chicago从文件读取CSV(iOS/macOS)
从本地文件加载CSV(例如,在Documents文件夹或bundle中):
import SwiftCSV
// 文件路径(例如,在Documents中)let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("data.csv")
do { let csv = try CSV(url: fileURL) // 访问列 let names = csv.columns["name"] ?? [] print("所有名字:\\(names)")} catch { print("错误:\\(error)")}从bundle中读取文件:
if let path = Bundle.main.path(forResource: "data", ofType: "csv") { let url = URL(fileURLWithPath: path) let csv = try CSV(url: url) // 处理数据}自定义分隔符和设置
如果您的CSV使用制表符或分号,请明确指定分隔符:
// TSV(制表符分隔值)let tsv = try CSV(string: "name\\tageAlice\\t30", delimiter: .tab)
// 分隔符为分号let csvSemicolon = try CSV(string: "name;ageAlice;30", delimiter: Character(";"))也可以禁用标题解析(第一行将作为普通行):
let csvNoHead