Swift 什么';这相当于斯威夫特中的finally
我尝试在Swift2中使用错误处理建模Swift 什么';这相当于斯威夫特中的finally,swift,try-catch-finally,Swift,Try Catch Finally,我尝试在Swift2中使用错误处理建模 do { try NSFileManager.defaultManager().removeItemAtPath("path") } catch { // ... } finally { // compiler error. } 但似乎没有finally关键字。我如何在Swift中实现try catch finally模式。欢迎任何帮助。您正在寻找的是延迟。它定义了一个代码块,该代码块在执行即将离开当前作用域之前不会执行,但始终会
do {
try NSFileManager.defaultManager().removeItemAtPath("path")
} catch {
// ...
} finally {
// compiler error.
}
但似乎没有
finally
关键字。我如何在Swift中实现try catch finally模式
。欢迎任何帮助。您正在寻找的是延迟
。它定义了一个代码块,该代码块在执行即将离开当前作用域之前不会执行,但始终会执行
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.
}
}
有关延迟的更多详细信息,请查看。Swift 2使用关键字介绍了自己对该要求的看法
最后
=在Swift 2中延迟
关键词文章如果您认为SWIFT 2.0错误处理与异常是同一回事,那么您就理解错了
这也不例外,这是一个符合协议
ErrorType
的错误块的目的是拦截抛出函数或方法抛出的错误。
基本上没有
最终
,您可以做的是将代码包装在延迟
块中,这保证执行并结束作用域。这里有一个来自SWIFT 2的样本 您可以使用defer语句来执行一组语句 代码执行会留下当前代码块。这可以让你做任何事情 无论 发生错误。示例包括关闭任何打开的文件描述符和 释放任何手动分配的内存
延迟在Swift 2.0中类似于finally,这意味着Swift确保您在当前功能范围的末尾执行延迟代码。 以下是我需要知道的几点: 1) 即使是警卫也会回来 2) 我们可以编写多个延迟作用域 以下是演示多个延迟的示例和输出:
func myMethod() {
print("Message one")
print("Message two")
print("Message three")
defer {
print("defered block 3")
}
defer {
print("defered block 2")
}
defer {
print("defered block 1")
}
print("Message four")
print("Message five")
}
Output:
Message one
Message two
Message three
Message four
Message five
defered block 1
defered block 2
defered block 3
请阅读以下内容:
例如:
print("Step 1")
do {
defer { print("Step 2") }
print("Step 3")
print("Step 4")
}
print("Step 5")
输出:
Step 1
Step 3
Step 4
Step 2
Step 5
这是延迟-在所有SwiftExcept中最重要的事情之一遗憾的是,似乎没有人意识到人们将拥有的模式还需要运行可能在最后抛出的代码,而延迟没有能力做到这一点。然后呢?“最终=推迟”-不完全是。在C#或Java等语言中的try/catch/finally中,无论是否存在异常,都将执行finally块。这种行为的好处是能够将代码放在finally块中,无论发生什么情况,finally块都将被执行。在swift中,defer只在当前作用域之后执行,catch块将位于不同的作用域中。所以这和“最终”不是一回事。
print("Step 1")
do {
defer { print("Step 2") }
print("Step 3")
print("Step 4")
}
print("Step 5")
Step 1
Step 3
Step 4
Step 2
Step 5