您的位置:首页 >> APPLE >> 和屌丝一起学SWIFT-错误处理
和屌丝一起学SWIFT-错误处理
[ 孤狼 | 2016-04-29 14:17:30 | APPLE ]

声  明

       本教程仅用于初学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

转载请注明出处:http://gl.paea.cn/apple/content/2016/04/29/98.html