错误处理try-catch,异常抛出throws、throw

swift2.0新增try-catch进行错误处理。
实际上,在其他语言如Java,Python上try-catch已经相当成熟。但是,与其他语言不同的是,try写在具体可能抛出异常的那句代码上。

do {
    let content = try NSString(contentsOfFile: "/file/path/str.txt", encoding: NSUTF8StringEncoding)
} catch {
    print("read content fail")
}

定义函数抛出异常的做法:
在返回值的前面加上throws,即可将函数定义为抛出异常类型

func requestImage(urlString:String) throws -> UIImage? {
    if let url = NSURL(string: urlString) {
        if let data = NSData(contentsOfURL: url) {
            return UIImage(data: data)
        }
    }
    return nil
}

如此,我们还需要定义抛出的异常的具体类型:
通过ErrorType的枚举定义异常类型:

enum RequestImageError : ErrorType{
    case NetworkError
    case URLError
}

NetworkError代表网络错误,URLError代表URL错误;
这样,就可以在方法中抛出错误了:

func requestImage(urlString:String) throws -> UIImage?{
    if let url = NSURL(string: urlString){
        if let data = NSData(contentsOfURL: url){
            return UIImage(data: data)
        }else{
            throw RequestImageError.NetworkError
        }
    }else{
        throw RequestImageError.URLError
    }
}

现在调用上面方法,就可以使用try-catch抛出异常了:

do{
        try self.requestImage("http://swiftcafe.io/images/qrcode.jpg")
        }catch RequestImageError.NetworkError{
            print("network error")
        }catch RequestImageError.URLError{
            print("url error")
        }catch{//加入一个空的catch,用于关闭catch。否则会报错:Errors thrown from here are not handled because the enclosing catch is not exhaustive  
        }
}

参考:http://swiftist.org/topics/460#9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值