Swift 中的函数处理

刚接触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()

可是怎么处理呢?

  1. 抛给调用者处理
  2. 针对特定错误进行处理
  3. 针对所有错误进行处理
抛出错误
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()
// 强制解包,必须保证方法有返回值

你可能感兴趣的:(Swift 中的函数处理)