【问题标题】:What is the difference between Swift 2.0 do-try-catch and regular Java/C#/C++ exceptionsSwift 2.0 do-try-catch 和常规 Java/C#/C++ 异常有什么区别
【发布时间】:2015-06-09 19:21:31
【问题描述】:

似乎 Swift 2.0 已经从传统的 ObjC(返回 NSError)和 Swift 1.X(成功/失败可选)约定运行时错误处理,变成了与 Java/C#/ 等语言中的异常处理非常相似的东西C++/等。

Apple 传统上使用 emphasized use of NSError instead of throwing NSException for runtime errors(与程序员错误相比),因为 NSException 堆栈展开可能会导致默认 ObjC 编译器设置的内存泄漏。

然而,现在他们设计了一些看起来非常非常类似于传统例外的东西。我的问题是:

除了nomenclature(错误与异常)和语法(do-catch,而不是try-catch)之外,Swift 2.0 错误处理和传统异常处理之间是否有任何真正的区别, 尝试在方法调用之前使用等)。

【问题讨论】:

  • Apple 提到(在 Using Swift with Cocoa and ObjC 中)Swift do-catch 语句会自动处理 NSError 返回方法(使用一些代码约定),但不会捕获 ObjC 代码抛出的 NSExceptions。

标签: swift error-handling runtime-error swift2


【解决方案1】:

我发现了 3 个主要差异:

  1. 不必列出函数可以抛出的所有错误,只需要一个 throws 关键字即可。

  2. 使用这些错误时没有明显的减速,而Java和其他语言需要构造一个Exception对象并展开堆栈。在 Swift 中,throws 关键字可以被视为返回 Either 对象的函数,其中一个是原始返回类型,另一个是 ErrorType 值。

  3. 在 Swift 中,所有错误都需要处理或声明为抛出,不可能从未声明它正在抛出错误的方法中获取错误。 (在 Java 术语中,所有错误都是“检查异常”)

【讨论】:

  • 我不了解 Java,但在 Swift 中,您也可以轻松做到以下三个中的任何一个:忽略错误try? b。因错误try! 而崩溃 c。处理错误do-try-catch。我提到这个是因为我不确定你是否可以用 Java 做所有事情,或者它是否像 Swift 一样简单,但很可能你可以
猜你喜欢
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多