如何快速编写投掷函数?

问题描述 投票:0回答:1

我已经做过一些研究,但我根本不了解Swift中的抛出函数是如何工作的。就像工作原理,语法一样,当您抛出错误时,就像打印它一样?就像您可以使用什么错误一样,您在枚举中声明了什么?

swift function throw
1个回答
1
投票

认为func foo() throws -> T的行为就像func foo() -> Result<T, Error>,并且带有一些语法糖。

  • [return aResult只是return .success(aResult)的语法糖
  • [throw e只是return .failure(e)的语法糖
  • [try! foo()只是foo().get()的语法糖
  • [catch只是用于模式匹配语句(如switch)的语法糖,用于解开值或错误

抛出错误实际上是在将Result<Success, Failure>引入标准库之前,但从概念上讲,它是相同的。

[Swift的错误与异常不同,例如C ++,Java等。

  • 异常将隐式地扩展到堆栈帧中,直到找到捕获器为止。 Swift的错误不会自动传播。因为它们只是常规return的语法糖,所以每个堆栈帧都需要捕获结果/错误,然后将其重新抛出(重新return它)以进行提升。
  • 完整的异常需要单独的代码来定义堆栈展开的工作方式。也就是说,考虑到任何代码都可能从任何地方抛出异常,编译器需要生成单独的代码路径,该路径定义了如何安全地释放内存,运行析构函数等用于可能抛出异常的每个可能区域。
© www.soinside.com 2019 - 2024. All rights reserved.