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
}
}