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

时间:2015-06-22 07:21:03

标签: swift try-catch-finally

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

do {
    try NSFileManager.defaultManager().removeItemAtPath("path")
} catch {
    // ...
} finally {
    // compiler error.
}

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

5 个答案:

答案 0 :(得分:18)

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

的示例
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.
    }
}
  

使用defer语句执行之前的一组语句   代码执行离开了当前的代码块。这可以让你做任何事情   无论是否进行必要的清理工作都应该进行   发生了错误。示例包括关闭任何打开的文件描述符和   释放任何手动分配的内存。

答案 1 :(得分:9)

Swift 2.0中的

延迟就像一个终结,这意味着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

答案 2 :(得分:3)

您要找的是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.
    }
}

有关defer的详细信息,请查看Apple Swift documentation, especially section "Specifying Clean-up Actions"

答案 3 :(得分:2)

Swift 2使用defer关键字

引入了自己对此要求的看法
defer { 
    print("Do clean up here") 
}
Swift 2中的

finally = defer

defer关键字

的文章

答案 4 :(得分:0)

请阅读:The defer keyword in Swift 2: try/finally done right

例如:

print("Step 1")

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

print("Step 5")

输出:1,3,4,2,5