如何使用一行代码在Swift 2.0中读取文本文件

时间:2015-09-21 02:05:12

标签: python swift file compare

我正在尝试阅读文件的内容。

在Python中,它将是一个单行:

seq_file = open('/some/local/file-path/on/computer.txt','r').read()
print seq_file

你如何在Swift中写一个单行代码来做同样的事情?

我打开文件的快捷代码(仅适用于不在Playground中的终端):

let seq_path = "/some/local/file-path/on/computer.txt"
let file_manager = NSFileManager.defaultManager()
let data: NSData = file_manager.contentsAtPath(seq_path)!
let seq_file = NSString(data: data, encoding: NSUTF8StringEncoding)
print(seq_file)

我不确定为什么在Swift中阅读会如此复杂。如果有人想解释那将是非常有帮助的 我已经了解了Swift的优点......如果它如此新颖强大,为什么他们会让这么简单的任务如此复杂?

背景(如果有人有兴趣): 生物学本科,2012年开始学习Python作为我的第一门编程语言。用它来分析生物数据到今天。现在我是一名研究生,多年来我对计算机科学的兴趣越来越浓厚。我想开始为OSX和iOS编写程序,我认为学习语言的好方法是在Swift中重写我的所有算法。

2 个答案:

答案 0 :(得分:1)

Dunno,我认为语言设计师有他们的优先事项。慈善的是,快速的代码可能会丢失一条线并仍然可以很好地阅读:

let file_manager = NSFileManager.defaultManager()
let data: NSData = file_manager.contentsAtPath("/some/local/file-path/on/computer.txt")!
let seq_file = NSString(data: data, encoding: NSUTF8StringEncoding)
print(seq_file)

这或多或少是用java 1.4读取文件所花费的:

try
{
    String line;
    File file = new File(("manifest.mf");
    BufferedReader inFile = new BufferedReader(new FileReader(file));
    while((line = inFile.readLine()) != null)
    {
            System.out.println(line)
    }
    inFile.close();
}
catch (IOException e)
{
    System.out.println("problem with file");
}

在java 8中,你可以这样做:

    Files.lines(Paths.get("manifest.mf")).forEach(System.out::println);
事情发生了变化。斯威夫特是1.2。虽然看起来有点过时了。

答案 1 :(得分:1)

  

我已经了解了Swift的优势......如果它如此新颖强大,   为什么他们会如此复杂地完成这么简单的任务呢?

好吧,在Swift中你可以这样做:

let string = try? NSString(contentsOfFile: "name.txt", encoding: NSASCIIStringEncoding)
print(string)

问题是你真的想要,因为较长的版本会给你更多的灵活性和更好的错误处理......