异常 – Swift中的运行时错误处理

我完全知道 Swift没有一个try / catch机制来捕获异常(好的,Swift 2.0现在支持它们).我也明白,许多API方法返回一个NSError,如果发生错误,将会填充一个错误对象.所以请不要指出我这个问题: Error-Handling in Swift-Language

但是这仍然不能解释如何对您自己的代码中的运行时错误做出反应,例如数组超出边界访问或强制展开无效的值为零.例如:

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

要么

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

每个程序员偶尔都会犯这样的错误,应该有一种方法,至少要记录下来以备后续分析.在调试时,Xcode可以向我们展示这些内容,但是如果这种情况发生在最终用户或beta测试人员身上?在纯C中有信号处理,也可以在Objective-C中使用.在斯威夫特有这样的东西吗?在应用程序死亡之前输入的集中式回调?

更新:

让我重新说一个问题:在一个大型项目中,手动检查每个循环上的上述错误和强制展开是不可行的.当运行时错误最终发生时,是否有回调像Objective C的segfault处理或NSSetUncaughtExceptionHandler将被调用,以便错误可以记录/电子邮件与崩溃的堆栈跟踪?

编辑:这个答案没有用swift 2.0更新.由于swift现在有错误处理我没有更新下面的答案.错误处理的一些方面将在将来使用swift 3.0进行更新.你可以按照这个答案 Error-Handling in Swift-Language

Swift被设为typeSafe语言.它在编译时会得到错误,而不是等待在运行时导致错误.

在第一个例子中,您使用可选.

var test: String?

首先明白可选的含义.当你指定可选的时候,你说它可能是零或没有价值.当你解开测试时,你说我知道这个值不是nil.Please打开它我确信那是你的责任看看它在哪里.如果你不确定那比你应该使用可选绑定这里.当你不确定价值总是使用,如果条件,同时打破

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

在第二个例子中,运行时异常处理应该是有意义的,但是如果条件具有count.so在第二个例子中可以很容易得到这个例子,作为开发人员,如果条件获得数组的数量,则应该使用它.

快速指南:

If you try to use subscript Syntax to retrieve or set a value for an
index that is outside of an array’s existing bounds,you will trigger
a runtime error. However,you can check that an index is valid before
using it,by comparing it to the array’s count property. Except when
count is 0 (meaning the array is empty),the largest valid index in an
array will always be count – 1,because arrays are indexed from zero.

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

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...