什么是最后在Swift中的等价物

tou*_*bun 19 try-catch-finally swift

我尝试在Swift2中使用错误处理建模.

do {
    try NSFileManager.defaultManager().removeItemAtPath("path")
} catch {
    // ...
} finally {
    // compiler error.
}
Run Code Online (Sandbox Code Playgroud)

但似乎那里没有finally关键字.如何try-catch-finally pattern在Swift中实现.欢迎提供任何帮助.

And*_*rea 18

如果您正在考虑将SWIFT 2.0错误处理与异常相同,那么您就会产生误解.
这也不例外,这是一个符合所谓协议的错误ErrorType.
该块的目的是拦截抛出函数或方法抛出的错误.
基本上没有finally,你可以做的是将你的代码包装在一个defer块中,这保证是执行和范围的结束.
这是SWIFT 2 编程指南中的示例

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.
    }
}
Run Code Online (Sandbox Code Playgroud)

在代码执行离开当前代码块之前,使用defer语句执行一组语句.这使您可以执行任何必须执行的清理,无论是否发生错误.示例包括关闭所有打开的文件描述符并释放任何手动分配的内存.


Nar*_*a G 9

在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
Run Code Online (Sandbox Code Playgroud)


mih*_*iho 6

你正在寻找的东西叫做defer. 它定义了一个代码块,直到执行即将离开当前作用域时才会执行,但它始终会被执行。

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.
    }
}
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,defer请参阅Apple Swift 文档,尤其是“指定清理操作”部分


小智 6

读这个: Swift 2 中的 defer 关键字:try/finally 做得对

例如 :

print("Step 1")

do {
    defer { print("Step 2") }
    print("Step 3")
    print("Step 4")
}

print("Step 5")
Run Code Online (Sandbox Code Playgroud)

输出 :

Step 1
Step 3
Step 4
Step 2
Step 5
Run Code Online (Sandbox Code Playgroud)