SwiftCSV读取CSV数据及初步封装

逻辑根系
• 阅读 4213

最近在做一个游戏助手类App,前期数据量较小,朋友帮忙抓取了一下装备数据存在CSV文件中,这里简单介绍一下SwiftCSV的安装使用及简单封装

安装

我们这里使用Cocoapods安装

target 'Tk300HeroAssistant' do
    pod 'SwiftCSV'

读入CSV文件

首先我们要读入CSV文件,创建一个CSV对象
首先我们从字符串字面量来创建一个CSV对象

let csv = CSV(string: "id,name,age\n1,Alice,18")

如果需要自定义分隔符可以这样

let tsv = CSV(string: "id\tname\tage\n1\tAlice\t18", delimiter: "\t")

我们可以传入路径及文件名来读取,可能会出错,所以使用try catch来捕获异常

// From a file (with errors)
do {
    let csv = try CSV(name: "users.csv")
} catch {
    // Catch errors or something
}

自定义换行符和编码方式

do {
    let tsv = try CSV(name: "users.tsv", delimiter: tab, encoding: NSUTF8StringEncoding)
} catch {
    // Error handling
}

数据读取

根据CSV的内容,写出如下的Model类
实际应用不要用中文
实际应用不要用中文
实际应用不要用中文

import Foundation
class SkillData:NSObject {
    var id:String?
    var name:String?
    var 快捷键:String?
    var 冷却时间:String?
    var 技能消耗:String?
    var Information:String?
}

数据读取是一个需要时间的过程,所以我们用GCD来在异步线程进行读取,通过一个回调函数来获取我们的数据,并且封装一个通用的读取方法

import Foundation
import SwiftCSV
class CSVReader {
    /**
     CSV读取
     
     - parameter fileName:         文件名
     - parameter completionHandle: completionHandle
     */
    class func loadDataFromCSV<T:NSObject>(fileName:String,completionHandle:([T])->Void){
        //异步读取
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
            let filePath = NSBundle.mainBundle().pathForResource(fileName, ofType: "csv")
            let csvURL = NSURL(fileURLWithPath: filePath!)
            do{
                let csv = try CSV(url: csvURL)
                let dataArray = csv.rows.map({ (dic:[String:String]) -> T in
                    let data = T()
                    dic.forEach({ (key,value) in
                        data.setValue(value, forKey: key)
                    })
                    return data
                })
                dispatch_async(dispatch_get_main_queue(), {
                    completionHandle(dataArray)
                })
            }catch{
                completionHandle([])
            }
        })
    }
}

随后我们在一个Manager类中创建业务相关的读取方法

import Foundation
class CSVDataManager{
    static let sharedInstance = CSVDataManager()
    var skillDataArray:[SkillData]?
    func loadSkillData(completionHandle:([SkillData])->Void) {
        if let data = skillDataArray{
            completionHandle(data)
        }else{
            CSVReader.loadDataFromCSV("skill data", completionHandle: { (data:[SkillData]) in
                self.skillDataArray =  data
                completionHandle(data)
            })
        }
    }
}
点赞
收藏
评论区
推荐文章
Immortal Immortal
4年前
MongoDB的安装与基本操作
最近刚好在学习爬虫,了解到MongoDB非常适合JSON数据存储,受到广大爬虫程序员的青睐,故学习之。一、安装MongoDB官网:进入官网后选择你需要的版本,系统,已及你想要的安装包(可选msi或zip,这里我使用msi,双击安装,简单!):::warning在MongoDB2.2版本后已经不再支持WindowsXP系统。最新版本也
九路 九路
5年前
Swift版UITextView自定义占位词,最大长度
最近这段时间在搞一个Swift的项目,算是帮朋友做的吧,虽然有点累但是自己也是从中学到了很多东西,其中自己也封装了一些常用的控件,最近忙完公司的项目以后就整理一下自己的心得。。希望大家一起学习!最近项目需要,很多的地方都用到了UITextView来实现一些需求,需要设置占位词和最大的长度,这里我是简单的封装了一下,希望大家多多指正,话不多说,上代码:
Stella981 Stella981
4年前
Cocos Creator基础教程(9)—优化代码编辑器
CocosCreator游戏开发主要是使用JavaScript语言,这里向大家推荐VisualStudioCode和Webstorm两款JavaScript神级编辑器。这两款编辑器的安装都很简单,这里主要介绍在CocosCreator项目中如何调整编辑器配置,以提升开发效率。1\.排除干扰文件我们知道CocosCre
Stella981 Stella981
4年前
Linux下rpm及yum安装jdk
笔者使用的Linux操作系统为CentOS7,Linux中有三种安装jdk的方式,在这里笔者主要介绍两种方式,即rpm和yum安装及卸载jdk,还有一种是直接从官网下载tar.gz压缩文件上传到Linux操作系统后解压配置环境变量即可,是最简单的一种方式,在这笔者不多做介绍。rpm安装JDK官网下载JDK1.
Stella981 Stella981
4年前
Python之CSV模块
1\.CSV简介CSV(CommaSeparatedValues)是逗号分隔符文本格式,常用于Excel和数据库的导入和导出,Python标准库的CSV模块提供了读取和写入CSV格式文件的对象。1.1csv.reader对象和csv文件的读取
Wesley13 Wesley13
4年前
oracle12c 12.2.0静默安装及简单使用
oracle12c12.2.0静默安装及简单使用m0\_379752572019091710:25:311302收藏2分类专栏:数据库oracle版权oracle12c静默安装及简单使用   oracle12c安装       安装centos7.5           修改配置文件 
Stella981 Stella981
4年前
IOS开发笔记(Swift):Cocoapods安装与使用
  最近在学习ios开发,下载了github上面很多优秀的源码,发现很多项目都包含Pods这个东西,在本地编译的时候总是编译不通过,于是搜索了一下Cocoapods,根据网络上的一些文章做了了解,并进行了安装使用,本篇来简单的整理一下。    首先,我们需要搞定楚Cocoapods是什么?来看一下官网(https://www.oschina.
Stella981 Stella981
4年前
Redis安装及前后置启动
Redis简单介绍及在Linux上安装(这里测试用是版本:redis3.0.0.tar.gz)一:什么是Redis?redis就是C语言编写的一个高性能的键值存储(keyvalue)的非关系型数据库(NoSql)。二:非关系型数据库的优点与缺点优点:可以轻松地处理海量数据缺点:1.没有主外键,
Stella981 Stella981
4年前
Graphviz安装及简单使用
关键字:GraphvizWindows环境安装、配置环境变量、pcharm中调用、中文乱码、dot语句基本格式GraphvizWindows环境安装:1.(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgraphviz.gitlab.i
Wesley13 Wesley13
4年前
Android之通过资源名称获取资源Id
有的时候我们需要通过资源名称获取资源Id,这个其实比较简单,只是做了个简单的封装,记录一下。/资源文件工具类@authorJenly/publicclassResourcesUtils{privatestaticfinalStringRES_ID
Stella981 Stella981
4年前
Navicat安装及简单使用
一、安装  下载完之后,直接解压出来就能用,看一下解压之后的目录:  双击打开下面这个文件(可以把它添加一个桌面快捷方式,或者添加到任务栏):  !(https://img2018.cnblogs.com/blog/988061/201811/988061201811261546587332023821512.p