Swift中finally的等价物是什么

efzxgjgh  于 2023-08-02  发布在  Swift
关注(0)|答案(5)|浏览(143)

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

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

字符串
但似乎没有finally关键字,我如何在Swift中实现try-catch-finally pattern,欢迎任何帮助。

fruv7luv

fruv7luv1#

如果您认为SWIFT 2.0错误处理与异常相同,您就误解了。
这也不例外,这是一个符合ErrorType协议的错误。
块的作用是拦截抛出函数或方法抛出的错误。
基本上没有finally,你可以做的是将你的代码 Package 在一个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语句在代码执行离开当前代码块之前执行一组语句。这使您可以执行任何必要的清理,无论是否发生错误。示例包括关闭任何打开的文件描述符和释放任何手动分配的内存。

kyks70gy

kyks70gy2#

Swift 2.0中的defer类似于finally,这意味着swift确保您在当前函数作用域的末尾执行defer代码。以下是我需要知道的几点:
1.不管守卫会不会回来
1.我们可以编写多个defer作用域
下面是演示多个延迟的示例和输出:

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")

}

字符串
输出量:

Message one
Message two
Message three
Message four
Message five
defered block 1
defered block 2
defered block 3

hivapdat

hivapdat3#

你要找的东西叫做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"

ldioqlga

ldioqlga4#

阅读: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")

字符串
输出量:

Step 1
Step 3
Step 4
Step 2
Step 5

piwo6bdm

piwo6bdm5#

Swift 2使用defer关键字引入了它自己对这一需求的处理

defer { 
    print("Do clean up here") 
}

字符串
finally = defer
defer关键字的文章

相关问题