什么是致命错误以及何时使用它们?

在进行以下 操作 之前,请先阅读本文: 快速处理错误

Apple文档链接: swift中的致命错误

工作:无条件打印给定消息并停止执行。

如果您在大洋中,不知道要去哪里?? 不知道该怎么办??,最好的选择是留下信息并下沉!!! 可能有人会找到您-这正是致命错误所要做的。

宣言:

致命错误是一种在控制台上打印给定消息并在执行时停止执行应用程序的方法。 该错误将更加具体,因为它将具有文件名和行号,以便于调试。

从声明中,我们可以看到fatalError(:)方法的参数。 它接受一个@autoClosure ,它不带任何参数并返回一个string 。 因此,消息可以是任何返回String表达式。 如果您不熟悉@autoClosure ,请快速浏览我的另一篇有关闭包的文章。

其他两个参数包括编译器自动采用的line numberfile name 。 我们不必为此烦恼。 我们只需要传递一个错误消息字符串即可。

永不返回类型:

在上面的函数声明中,您可以看到函数返回类型Never 。 下面提供了有关Never类型的文档。

在声明无条件引发错误,陷阱或其他情况不会终止的闭包,函数或方法时,请使用Never作为返回类型。

有一些函数可立即终止该过程,并且不会返回到调用方。 在Swift 3之前, @noreturn在Swift中使用@noreturn属性标记。在swift 3中, @noreturn属性被替换为Never返回类型。

具有“ Never作为返回类型的函数还可以用于标记“不应发生”的情况并指示编程错误。

如何调用致命错误?

我们以两种方式之一使用功能:

没有消息:

 致命错误() 

我在viewDidLoad方法中添加了上述代码,这是执行fatalError()时在控制台中打印的fatalError()

  2017–07–26 10:42:01.862958 + 0530计算器[1887:495386]致命错误:文件/Users/abhilash/Desktop/Calculator/Calculator/ViewController.swift,第95行 

带有错误信息:

  fatalError(“错误:未知操作。”) 

我在viewDidLoad方法中添加了上面的代码,控制台将其打印出来:

  2017–07–26 10:56:07.003120 + 0530计算器[1892:497747]致命错误:错误:未知操作。:文件/Users/abhilash/Desktop/Calculator/Calculator/ViewController.swift,第95行 

致命错误提示:

  • 当应用程序进入未知或意外状态时,通常会引发致命错误。
  • 您不能在do-catch语句中捕获致命错误。 并且可能引发致命错误的方法不需要标记为throwing。
  • 在正常情况下,我们不希望控制流达到fatalError方法调用。 如果已到达,则意味着该应用程序处于未知状态,我们不想在未知状态下运行该应用程序。 因此,应用程序此时将崩溃,这是一件好事。
  • 如果决定使用致命错误,请谨慎使用。 仅在应用程序进入未知状态(不知道如何处理的状态)时才使用它们。

在cocoacasts.com的这篇文章中,我找到了一个关于在哪里使用致命错误的好例子。

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) -> UITableViewCell { if let section = Section(rawValue: indexPath.section) { switch section { case .info: let cell = tableView.dequeueReusableCell(withIdentifier: infoCell, for: indexPath) return configureInfoCell(cell) case .profile: let cell = tableView.dequeueReusableCell(withIdentifier: infoCell, for: indexPath) return configureProfileCell(cell) case .settings: let cell = tableView.dequeueReusableCell(withIdentifier: infoCell, for: indexPath) return configureSettingsCell(cell, withModel: settingsModel) } } fatalError("Invalid Section") } 

而已 。 现在您知道什么是致命错误,以及在哪里使用它们。

请享用!!

如果您喜欢阅读这篇文章,请分享并推荐它,以便其他人可以找到💚💚💚💚💚💚!!!!

您可以在Medium上关注我以获取新文章。 在LinkedIn上与我联系。

如果您有任何评论,问题或建议,请随时在下面的评论部分中发布它们!