一个 Swift 软件包,用于使用枚举类型格式读取和写入 CSV。
导入和导出依赖于自定义的格式枚举,该枚举实现了 CSVFormat 协议。此格式应与您要导入或导出的 CSV 行格式相对应。
private enum TestShoppingItem: String, CSVFormat {
case id
case name
case price
var title: String {
rawValue.capitalized
}
}
要读取 CSV 字符串或文件,请使用 CSV 字符串或 url 以及先前定义的 CSVFormat 枚举初始化 CSVData 对象。 行和列的分隔符会自动猜测,但您也可以手动设置 rowSeparator 和 columnSeparator 属性。
func read() throws {
// read CSV string
let testCSVString = "id,name,Price\n1,Bananas,1.20\n2,Sugar,2.30\n3,Milk,1.99"
var csvData = try CSVData<TestShoppingItem>(csvString: testCSVString)
// read CSV file on disk
let documentsFolder = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let csvUrl = documentsFolder.appending(path: "testCSV.csv")
csvData = try CSVData<TestShoppingItem>(url: csvUrl)
}
要使用您自己的数据初始化 CSVData 对象,请使用任何类型数据的数组调用初始化程序。 提供一个闭包作为数据源来初始化所有列中每个列的值。
func createCSVData() -> CSVData<TestShoppingItem> {
let csvData = CSVData<TestShoppingItem>(items: Array(0 ..< 10)) { index, column in
switch column {
case .id:
return "\(index)"
case .name:
return "Item \(index + 1)"
case .price:
return "\(Double(index) * 1.5)"
}
}
return csvData
}
您可以在以后以类型安全的方式操作 csv 数据对象。
func manipulateCSVData() {
let csvData = createCSVData()
csvData[1][.name] = "Test"
}
可以将 CSVData 导出到字符串。 使用 columnConfiguration 参数,您可以手动选择要导出的列。
func export() {
let csvData = createCSVData()
// export complete CSV string
let csvString = csvData.csvString()
// export only name column
let csvStringOnlyName = csvData.csvString(columnConfiguration: .includeOnly(columns: [.name]))
// export all columns but price
let csvStringAllButPrice = csvData.csvString(columnConfiguration: .allBut(columns: [.price]))
}
该库可以与 XCode 中的 Swift Package Manager 一起使用,也可以手动添加为包依赖项。