在Java中,我们读取文件时,会发生异常,我们一般会在 finally 块中关闭文件流。而在Swift中,我们可以在defer代码块中指定清理操作。
func processFile(fileName: String) throws {
if exist(fileName) {
let file = open(fileName)
defer {
close(file)
}
while let line = try file.readLine() {
// 文件处理
}
}
}
如果调用 file.readLine() 时出现错误,defer 代码块会执行,文件就会关闭。如果没有出现错误呢?defer 代码块还是会执行,如此看来,其实和 Java 中的 finally 代码块的功能是一样的。