当前位置: 首页 > 知识库问答 >
问题:

Swift中的运行时错误处理

元彦君
2023-03-14

我完全知道Swift没有一个try/catch机制来捕捉异常(好的,Swift2.0现在支持它们)。我还了解到,许多API方法返回一个NSError,如果出现问题,该NSError将被一个错误对象填充。所以请不要向我提出这个问题:Swift语言中的错误处理

但这仍然不能解释如何对您自己代码中的运行时错误做出反应,比如数组越界访问或强制展开一个为nil的可选值。例如:

var test: String?
test = nil
println(test!) //oops!

var arr = [0,1,2]
for i = 0...3 {
    println(arr[i]) //oops!
}

每个html" target="_blank">程序员都会偶尔犯这样的错误,至少应该有一种方法来记录这些错误,以便以后进行分析。在调试时,Xcode可以向我们展示这些,但如果这种情况发生在最终用户或测试版测试人员身上呢?在纯C中有信号处理,它也可以在Objective-C中使用。斯威夫特身上有这样的东西吗?就在应用程序死亡前输入的集中回调?

更新:

共有1个答案

纪俊良
2023-03-14

编辑:这个答案没有用swift 2.0更新。由于swift现在有错误处理,我没有更新下面的答案。错误处理的某些方面将在将来的swift 3.0中更新。您可以使用Swift语言进行以下回答错误处理

Swift被设置为typesafe语言,它在编译时出错,而不是等到运行时才出错。

在第一个示例中,您使用的是optional

var test: String?

首先理解optional的含义。当您指定option时,您的意思是它可以是nil或没有值。现在当您展开test时,您的意思是我知道这个值是不是nil。请展开它,我确信这一点。所以您的责任是查看它的位置nil。如果您不确定这一点,您应该在这里使用可选绑定。如果您不确定值,请在展开时使用if条件

  if let notNilTest = test {
    //use notNilTest
  }
  else{
   //handle error
  }

在第二个示例中,使用运行时异常处理应该是有意义的,但是使用if条件具有count,您可以很容易地得到它。因此,在第二个示例中,作为开发人员,您应该使用if条件来获取数组的count

来自swift指南:

如果尝试使用下标语法为数组现有边界之外的索引检索或设置值,则将触发运行时错误。但是,可以通过将索引与数组的count属性进行比较,在使用索引之前检查索引是否有效。除非count为0(表示数组为空),否则数组中最大的有效索引将始终为count-1,因为数组是从零开始索引的。

他们清楚地提到了这一点,你应该注意这些事情来减少代码的错误。他们提供了一些东西,我们应该知道如何使用这些东西。

 类似资料:
  • 主要内容:net 包中的例子,错误接口的定义格式,自定义一个错误,示例:在解析中使用自定义错误Go语言的错误处理思想及设计包含以下特征: 一个可能造成错误的函数,需要返回值中返回一个错误接口(error),如果调用是成功的,错误接口将返回 nil,否则返回错误。 在函数调用后需要检查错误,如果发生错误,则进行必要的错误处理。 Go语言没有类似 Java 或 .NET 中的异常处理机制,虽然可以使用 defer、panic、recover 模拟,但官方并不主张这样做,Go语言的设计者认为其他

  • 问题内容: 我对Swift的了解还不够多,但是我注意到的一件事是没有例外。那么如何在Swift中进行错误处理呢?有没有人发现任何与错误处理相关的信息? 问题答案: 斯威夫特2&3 Swift 2中的情况有所变化,因为有了新的错误处理机制,该机制与异常有些相似,但在细节上有所不同。 1.指示错误可能性 如果函数/方法想要表明它可能抛出错误,则应包含这样的关键字 注意:函数没有实际抛出的错误类型的规范

  • 问题内容: 我在Swift中使用,需要获取更好的错误消息。 在调试描述中(例如),我可以看到诸如“给定数据不是有效的JSON”之类的消息,但是我需要知道的是,而不是网络错误(例如)。 我尝试将其强制转换为,但这似乎并未显示更多信息。我当然不需要字符串-甚至错误代码也比这有用得多… 问题答案: 切勿在解码块中打印。这将返回一个毫无意义的通用错误消息。始终打印实例。然后,您会得到所需的信息。 或针对

  • 问题内容: 我正在尝试使用swift和firebase在iOS项目中创建用户按钮时添加错误处理: 这是按钮的代码: 我不确定switch语句中错误的语法是否正确! 因为当我在模拟器中对其进行测试时,它始终会给我提供默认情况,这是未知错误!+我在文档中找不到语法:https : //firebase.google.com/docs/auth/ios/errors 因此,使用新的firebase和sw

  • 当我在我的三星Galaxy双机上运行这个应用程序时(没有在其他设备上测试),它会给我错误/异常

  • 问题内容: 我遇到了我不知道的代码问题。安装Xcode 7 Beta并将Swift代码转换为Swift 2之后 码: 屏幕截图: 问题答案: 从Swift 2开始,将产生错误的Cocoa方法转换为引发错误的Swift函数。 而不是 Swift 1.x 中的可选返回值和错误参数: 在 Swift 2中, 该方法现在返回非可选值,并在错误情况下引发错误,必须使用try-catch处理: 有关更多信息,