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()
// 强制解包,必须保证方法有返回值
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,642评论 19 139
  • 作者:Olivier Halligon,原文链接,原文日期:2015-12-17译者:JackAlan;校对:靛青...
    梁杰_numbbbbb阅读 3,805评论 0 1
  • 背景 最近由于项目需要用到内嵌浏览器,IE内核太依赖于操作系统,对H5的支持也不太好。CEF是基于chromium...
    AlgoPeek阅读 12,762评论 3 7
  • 【太10:37】爱父母过于爱我的,不配作我的门徒;爱儿女过于爱我的,不配作我的门徒; 【太10:38】不背着他的十...
    Emma小羊阅读 2,615评论 0 0
  • UML, Unified Modeling Language, 中文叫“统一建模语言”。 理解UML应注意以下事实...
    ybin阅读 3,682评论 0 3