刚接触Swift 可能很少知道怎么处理错误,很多同学会觉得这不就是跟OC 的一样吗,
NSError *err = nil;
NSString *fileStuff = [[NSString alloc] initWithContentsOfFile:@"someFile.txt" encoding:NSUTF8StringEncoding error:&err];
确实,像上面这段代码如果你对错误不关心的话,直接传递 nil 就行。
在Swift
中 我们应该怎么定义错误,遇到错误又该怎样处理呢?
我们先看个例子:
enum FileReadingError: ErrorType {
case FileNotFound
case PermissionDeny
case FileCorrupted
}
接着创建一个只抛出错误的函数
func pretendToReadTestFile () throw -> NSData {
throw FileReadingError.FileNotFound
}
注意这里的throw
在 ->
之前.
一般我们这样使用
let data = try pretendToReadTestFile()
可是怎么处理呢?
- 抛给调用者处理
- 针对特定错误进行处理
- 针对所有错误进行处理
抛出错误
func getDataFromSomething() throws -> NSData {
let data = try pretendToReadTestFile()
return data
}
处理特定的错误
do {
let someValue = try pretendReadTestFile()
} catch FileReadingError.FileNotFound {
print("not found")
}
处理所有错误
do {
let someData = try pretendToReadTestFile()
} catch {
print("Something weird happened.")
}
如果我们想得到一个可选值呢?
如果我们不关心错误,我们只关心是否有返回值,可以这样处理
let optionalData = try?pretendToReadTestFile()
// If there was an error, I don’t care what it is, just set the value to nil
当然有 ?
就有 !
两个配对不是
so
let optionalData = try! pretendToReadTestFile()
// 强制解包,必须保证方法有返回值
网友评论