Swift 2 throws

在文件操作中复制文件的 API 在 Swift 1 中使用的是和 Objective-C 类似的 NSError 指针方式。

func copyItemAtPath(_ srcPath: String, toPath dstPath: String, error: NSErrorPointer)

而在 Swift 2 中,变为了 throws。

func copyItemAtPath(_ srcPath: String, toPath dstPath: String) throws

使用时,Swift 1 中我们需要创建并传入 NSError 的指针,在方法调用后检查指针的内容,来判断是否成功。

let fileManager = NSFileManager.defaultManager()

var error: NSError?

fileManager.copyItemAtPath(srcPath, toPath: dstPath, error: &error)

if error != nil {

// 发生了错误

} else {

// 复制成功

}

在实践中,因为这个 API 仅会在极其特定的条件下(比如磁盘空间不足)会出错,所以开发者为了方便,有时会直接传入 nil 来忽视掉这个错误。

忽略错误

let fileManager = NSFileManager.defaultManager()

// 不关心是否发生错误

fileManager.copyItemAtPath(srcPath, toPath: dstPath, error: nil)

这种做法无形中降低了应用的可靠性以及从错误中恢复的能力。为了解决这个问题,Swift 2 中在编译器层级就对 throws 进行了限定。被标记为 throws 的 API,我们需要完整的 try catch 来捕获可能的异常,否则无法编译通过。

编译失败

let fileManager = NSFileManager.defaultManager()

do {

try fileManager.copyItemAtPath(srcPath, toPath: dstPath)

} catch let error as NSError {

// 发生了错误

print(error.localizedDescription)

}

对于非 Cocoa 框架的 API,我们也可以通过声明 ErrorType 并在出错时进行 throw 操作。这为错误处理提供了统一的处理出口,有益于提高应用质量。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 章节导航:Swift开发指南:使用Swift与Cocoa和Objective-C(Swift 4) - 1.入门S...
    Minecode阅读 3,227评论 0 23
  • 27、ViewController的didReceiveMemoryWarning是在什么时候调用的?默认的操作是...
    烟雨平生花飞舞阅读 623评论 0 1
  • FileManager 是 Foundation 框架中用来管理和操作文件、目录等文件系统相关联内容的类。 1、路...
    萧过阅读 3,492评论 0 0
  • 长大不是一蹴而就的事,也不是只有轰轰烈烈、脱胎换骨才叫成长。我们都不完美,可是,只要勇敢走出舒适区,克服掉依赖的心...
    布大叔阅读 79评论 0 0
  • 我们都是对世界无用之人,但是都是对彼此最为重要的人。 爱和被爱是一辈子里最重要的事情。所以,且行且珍惜。
    火柴蜗牛阅读 175评论 0 1