我试图读取一个在 NSURL
中给出的文件,并将其加载到一个数组中,用换行符 \n
分隔项。
到目前为止,我是这样做的:
var possList: NSString? = NSString.stringWithContentsOfURL(filePath.URL) as? NSString
if var list = possList {
list = list.componentsSeparatedByString("\n") as NSString[]
return list
}
else {
//return empty list
}
有几个原因让我不太高兴。第一,我处理的文件大小从几千字节到几百 MB 不等。正如您可以想象的那样,使用这么大的字符串是缓慢而笨拙的。其次,这会在执行时冻结 UI ——同样,这不是好事。
我曾经研究过在单独的线程中运行这段代码,但是我在这方面遇到了麻烦,而且,它仍然不能解决处理巨大字符串的问题。
我想做的是类似于下面的伪代码:
var aStreamReader = new StreamReader(from_file_or_url)
while aStreamReader.hasNextLine == true {
currentline = aStreamReader.nextLine()
list.addItem(currentline)
}
我要怎么在斯威夫特身上做到?
关于我正在读取的文件的一些注释: 所有文件都由由 \n
或 \r\n
分隔的短(< 255个字符)字符串组成。文件的长度从约100行到超过5000万行不等。它们可能包含欧洲字符和/或带有重音符号的字符。