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