声 明
本教程仅用于初学SWIFT同学使用,内容由本人(孤狼)学习过程中笔记编写,本教程使用SWIFT版本为2.0。本教程内容可以自由转载,但必须同时附带本声明,或注明出处。PAEA.CN版权所有。
欢迎回到和屌丝一起学SWIFT系列教程,上节我们说了自动引用计数,它保障了内存的使用安全,那么我们的代码安全怎么来保证呢?这节我们就一起来学习保证代码安全的一个相关知识-错误处理.
错误处理
我们无法保证代码的100%正常运行,所以,我们需要完善的错误处理来替我们保证运行.
[抛出错误]
在SWIFT中错误用 ErrorType 协议类型的值表示.
enum MyError:ErrorType{
case youarenotpeople
case youarenotpeople2(msg:String)
}
既然我们定义了错误,那么遇到错误怎么抛出呢?我们使用 throw 来抛出.
throw MyError.youarenotpeople
提示报错信息"text.MyError.youarenotpeople"
throw MyError.youarenotpeople2(msg:"youaredog")
提示报错信息"text.MyError.youarenotpeople2("youaredog")"
[错误传递]
在SWIFT中,我们使用关键字 throws 来标记一个可以抛出错误的函数.这么做有什么好处呢?加了 throws 标记的函数可以传递错误,如果没有加,那么就只能在函数内部来处理错误了.
enum MyError:ErrorType{
case haveerror(msg:String)
}
class B{
var bnum=0;
func bb() throws{
if(bnum>=0){}else{
throw MyError.haveerror(msg:"bnum不得小于0");
}
if(bnum Int{
if(bnum>=0){}else{
throw MyError.haveerror(msg:"bnum不得小于0");
}
if(bnum<=100){}else{
throw MyError.haveerror(msg:"bnum不得大于100");
}
return bnum;
}
}
var b=B();
b.bnum=20;
try b.bb(); //输出"考试分数: 20"
b.bnum=110;
try b.bb(); //输出"text.MyError.haveerror("bnum不得大于100")"
//因为这里已经定义了bb函数可能会抛出错误,我要我们要使用关键字 try(尝试) 来运行
//这个函数.如果需要这个函数返回值,我们需要使用 try? 来运行这个函数,如果出现错
//误,直接赋值 nil
b.bnum=90;
var s=try? b.cc();
print(s); //输出"90"
b.bnum=110;
s=try? b.cc();
print(s); //输出"nil"
//如果你能够确定这段代码绝对不会出错,那么可以使用 try! 来中断错误抛出.
//实际效果和 try 差不多.
b.bnum=90;
var s2=try! b.cc();
print(s2); //输出"90"
b.bnum=110;
s2=try! b.cc();
print(s2); //输出"text.MyError.haveerror("bnum不得大于100")"
[do-catch]
我们可以抛出错误了,但是不能一直卡在这里,我们需要一些代码来解决这些错误.do-catch错误处理,我们把可能出错的操作放到 do 代码块里,如果出现了错误,那么就由 catch 代码块来捕获错误并处理错误.
var c=B();
c.bnum=20;
do{
try c.bb();
}catch MyError.haveerror(msg:"bnum不得小于0"){
print("bnum不得小于0");
}catch MyError.haveerror(msg:"bnum不得大于100"){
print("bnum不得大于100");
}
//输出"考试分数: 20"
c.bnum=110;
do{
try c.bb();
}catch MyError.haveerror(msg:"bnum不得小于0"){
print("bnum不得小于0");
}catch MyError.haveerror(msg:"bnum不得大于100"){
print("bnum不得大于100");
}
//输出"bnum不得大于100"
本节代码下载 访问密码 qbhq