func processFile(filename: String) throws {
if exists(filename) {
let file = open(filename)
defer {
close(file)
}
while let line = try file.readline() {
/* Work with the file. */
}
// close(file) is called here, at the end of the scope.
}
}
func processFile(filename: String) throws {
if exists(filename) {
let file = open(filename)
defer {
close(file)
}
while let line = try file.readline() {
/* Work with the file. */
}
// close(file) is called here, at the end of the scope.
}
}
5条答案
按热度按时间fruv7luv1#
如果您认为SWIFT 2.0错误处理与异常相同,您就误解了。
这也不例外,这是一个符合
ErrorType
协议的错误。块的作用是拦截抛出函数或方法抛出的错误。
基本上没有
finally
,你可以做的是将你的代码 Package 在一个defer
块中,这保证是执行和作用域的结束。以下是SWIFT 2 programming guide的示例
字符串
您可以使用defer语句在代码执行离开当前代码块之前执行一组语句。这使您可以执行任何必要的清理,无论是否发生错误。示例包括关闭任何打开的文件描述符和释放任何手动分配的内存。
kyks70gy2#
Swift 2.0中的defer类似于finally,这意味着swift确保您在当前函数作用域的末尾执行defer代码。以下是我需要知道的几点:
1.不管守卫会不会回来
1.我们可以编写多个defer作用域
下面是演示多个延迟的示例和输出:
字符串
输出量:
型
hivapdat3#
你要找的东西叫做
defer
。它定义了一个代码块,直到执行即将离开当前作用域时才执行,但它始终被执行。字符串
有关
defer
的更多详细信息,请查看Apple Swift documentation, especially section "Specifying Clean-up Actions"。ldioqlga4#
阅读:The defer keyword in Swift 2: try/finally done right
例如:
字符串
输出量:
型
piwo6bdm5#
Swift 2使用defer关键字引入了它自己对这一需求的处理
字符串
finally
=defer
。defer关键字的文章