错误处理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

你可能感兴趣的:(每天学点Swift)