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

前端之家收集整理的这篇文章主要介绍了异常 – 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.

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

猜你在找的Swift相关文章