异常捕获try catch的使用
2016-03-09 14:47
267 查看
新的异常捕获机制更新于 WWDC 2015上发布的新的Swift2.0,异常的try-catch机制有助于我们更快的定位出错原因所在,此处简单说明下try-catch机制的用法.
1.定义枚举异常值
首先我们可以创建自己的异常枚举值,这要实现ErrorType协议,只不过这个协议是空的,我们加上就好.
2.抛出异常
我们可以在方法中抛出异常,定义抛出异常的方法很简单,只需要在返回值的 -> 前面加上throws就好了,示例如下:(这个方法是自定义的Dog类里的一个实例方法,name.length()是为系统的String类通过延展添加的方法)
3.捕获异常
我们可以在调用可能抛出异常的方法后面加上catch关键字来捕获异常
4.不处理异常
如果确定某段可能抛出异常的代码是不可能抛出异常的,则可以使用try!来进行调用,但是如果一旦这段代码抛出了一个异常,则会引起一个运行时的异常错误,所以请慎用.
结尾:
值得注意的是,在可能抛出异常的方法中,一但有一处抛出了一个异常,那么这个方法则会立刻停止运行.抛出异常代码后面的代码都将不会得到执行
附自定义Dog类和调用Dog类的代码
enum
DogError :
ErrorType{
case
NameInvalidError
case
AgeInvalidError
case
NameLengthError
}
class
Dog:
NSObject
{
var
name :
String!
var
age :
Int!
init(name:String,age:Int){
self.name
= name
self.age
= age
}
func
printDogMessage(dog:Dog)
throws
->
String{
print("Dog-Class:开始检查名字是否无效")
guard
let
name :
String
= dog.name
else{
throw
DogError.NameInvalidError
}
print("Dog-Class:开始检查名字长度是否无效")
if
name.length() <
3{
throw
DogError.NameLengthError
}
print("Dog-Class:开始检查年龄是否无效")
if
age
<
0
||
age
>
20{
throw
DogError.AgeInvalidError
}
print("Dog-Class:返回信息")
return
"dog的信息为"
+ dog.name
+
"\(dog.age)"
}
}
测试方法的代码:
let
myDog =
Dog(name:
"小白",
age:
21)
var
str :
String!
do{
try
str = myDog.printDogMessage(myDog)
}
catch
{
switch
(error){
case
DogError.NameInvalidError:
print("dog的名字无效错误")
case
DogError.NameLengthError :
print("dog的名字长度错误")
case
DogError.AgeInvalidError :
print("dog的年龄设置不合法")
default:print("Main:捕获到dog其他错误")
}
}
print("Main:最后输出为\(str)")
1.定义枚举异常值
首先我们可以创建自己的异常枚举值,这要实现ErrorType协议,只不过这个协议是空的,我们加上就好.
2.抛出异常
我们可以在方法中抛出异常,定义抛出异常的方法很简单,只需要在返回值的 -> 前面加上throws就好了,示例如下:(这个方法是自定义的Dog类里的一个实例方法,name.length()是为系统的String类通过延展添加的方法)
3.捕获异常
我们可以在调用可能抛出异常的方法后面加上catch关键字来捕获异常
4.不处理异常
如果确定某段可能抛出异常的代码是不可能抛出异常的,则可以使用try!来进行调用,但是如果一旦这段代码抛出了一个异常,则会引起一个运行时的异常错误,所以请慎用.
结尾:
值得注意的是,在可能抛出异常的方法中,一但有一处抛出了一个异常,那么这个方法则会立刻停止运行.抛出异常代码后面的代码都将不会得到执行
附自定义Dog类和调用Dog类的代码
enum
DogError :
ErrorType{
case
NameInvalidError
case
AgeInvalidError
case
NameLengthError
}
class
Dog:
NSObject
{
var
name :
String!
var
age :
Int!
init(name:String,age:Int){
self.name
= name
self.age
= age
}
func
printDogMessage(dog:Dog)
throws
->
String{
print("Dog-Class:开始检查名字是否无效")
guard
let
name :
String
= dog.name
else{
throw
DogError.NameInvalidError
}
print("Dog-Class:开始检查名字长度是否无效")
if
name.length() <
3{
throw
DogError.NameLengthError
}
print("Dog-Class:开始检查年龄是否无效")
if
age
<
0
||
age
>
20{
throw
DogError.AgeInvalidError
}
print("Dog-Class:返回信息")
return
"dog的信息为"
+ dog.name
+
"\(dog.age)"
}
}
测试方法的代码:
let
myDog =
Dog(name:
"小白",
age:
21)
var
str :
String!
do{
try
str = myDog.printDogMessage(myDog)
}
catch
{
switch
(error){
case
DogError.NameInvalidError:
print("dog的名字无效错误")
case
DogError.NameLengthError :
print("dog的名字长度错误")
case
DogError.AgeInvalidError :
print("dog的年龄设置不合法")
default:print("Main:捕获到dog其他错误")
}
}
print("Main:最后输出为\(str)")
相关文章推荐
- 如何优雅地处理前端异常?
- C#异常处理详解
- 轻松学习C#的异常处理
- PHP异常处理Exception类
- JS异常处理的一个想法(sofish)
- 杂谈try-catch-finally异常处理
- 再谈异常处理try catch finally
- PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
- PHP如何抛出异常处理错误
- PHP中的错误处理、异常处理机制分析
- js中的异常处理try...catch使用介绍
- php5编程中的异常处理详细方法介绍
- php异常处理使用示例
- Asp.net Mvc 身份验证、异常处理、权限验证(拦截器)实现代码
- javascript 异常处理使用总结
- java多线程中的异常处理机制简析
- 异常处理—错误抛出机制
- Python try except finally返回数据的问题
- python学习笔记异常处理(七)
- 定位错误行,并纪录日志