最近在写一个记账的APP,原因是一直用的口袋记账不更新了,到现在还不支持全面屏,于是想着扒了它的素材,自己仿写一个,第一问题就是怎么导入以前几年的账单数据?目前口袋记账是可以导出账单发送到自己的邮箱的,但是邮箱收到的Excel文档,在查阅一些资料之后,发现可以通过WPS打开文档另存为CSV文件,然后在项目里读取CSV文件转成数组,然后转模型获得model对象,就可以展示在列表之中。
安装
CocoaPods
1 | pod "SwiftCSV" |
Carthage
1 | github "swiftcsv/SwiftCSV" |
读取CSV文件
首先我们要读入CSV文件,创建一个CSV对象, 然后我们从字符串字面量来创建一个CSV对象
1 | let csv = CSV(string: "id,name,age\n1,Alice,18") |
如果需要自定义分隔符可以这样
1 | let tsv = CSV(string: "id\tname\tage\n1\tAlice\t18", delimiter: "\t") |
我们可以传入路径及文件名来读取,可能会出错,所以使用try catch来捕获异常
1 | // From a file (with errors) |
自定义换行符和编码方式
1 | do { |
数据读取
根据CSV的内容,写出如下的Model类
1 | import Foundation |
数据读取是一个需要时间的过程,所以我们用GCD来在异步线程进行读取,通过一个回调函数来获取我们的数据,并且封装一个通用的读取方法
1 | import Foundation |
随后我们在一个Manager类中创建业务相关的读取方法
1 | import Foundation |