Swift 异常处理
如何建造异常类型?在 iOS 开发当中,我们会面对很多异常处理。在 Cocoa Touch 中我们使用 在 Swift 中, enum MyError: ErrorType {
case NotExist
case OutOfRange
}
如何抛出异常在抛出异常之前,我们需要在函数或方法的返回箭头 func myMethodRetrunString() throws -> String
// No return,we can just add throws in the end
func myMethodRetrunNothing() throws
声明之后, 我们需要在函数或者方法里扔出异常,很简单使用 func myMethod() throws
//...
// item is an optional value
guard let item = item else {
// need throws the error out
throw MyError.NotExist
}
// do with item
}
上面这段代码使用了 Guard在 Haskell,Erlang 等语言中早已存在
在 Swift 中,
值得注意的是, 虽然我们在异常处理中提到了 如何获取并处理异常?上文讲述了如何建造抛出异常,获取和处理异常就变得很简单了。使用 do {
try functionWillThrowError() } catch {
// deal with error
}
do {
try functionWillThrowError() } catch MyError.NotExist {
// deal with not exist
} catch MyError.OutOfRange {
// deal with not exist
}
这里值得提一下在 Swift 2.0中一个跟异常处理没有关系的改进
不处理异常如果我不想处理异常怎么办,或者说,我非常确定某个方法或者函数虽然声明会抛出异常,但是我自己知道我在使用时候是绝对不会抛出任何异常的。这种情况下 我们可以使用 try! functionThrowErrorNil()
当然,如果你使用 Defer文章结束前我们再讨论下 在你的代码块就要结束前。如果你使用了 func myFunction() throws {
defer {
// No matter what happened I need do something
print("All done,clean up here")
}
guard let item = item else {
// need throws the error out
throw MyError.NotExist
}
guard item.count > maxNumber else {
// need throws the error out
throw MyError.OutOfRange
}
// do something with item
// ...
}
总结
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |