[swift 进阶]读书笔记-第八章:错误处理 C8P9 高阶函数和错误

第八章:错误处理 Error Handling

8.9 高阶函数和错误 Higher-Order Functions and Errors

本小节主要讲了在遇到异步耗时操做可能抛出错误时候的处理。(书中也提到了并无什么完美的处理,只有对应不一样场景相对合适一些的处理方式)git

对这个知识点作一个简单了解就行。github

先引入一个问题

假设方法compute是一个耗时操做,通常咱们会使用闭包去异步的拿到返回值。闭包

func compute(callback: Int -> ())
复制代码

那么,若是。 compute方法可能会抛错捏? 并且正好咱们想要拿到这个错误的详细信息app

通常状况下咱们会这样写异步

func compute(callback: Int throws -> ())
复制代码

一眼望去老铁这样写妥妥没毛病啊(哈哈其实我也是这么以为的。)
but!!!函数

这样写如今并非指计算可能失败,而是表示回调自己可能会抛出错误spa

下面咱们再回顾一下好久好久以前的知识点:

可选值Result 做用于类型,而 throws 只对函数起效。将一个函数标注为 throws 意味着这个函数可能会失败.code

咱们真正须要的是用一个Result 来封装 Int 参数 的函数去解决咱们上面的需求。get

func compute(callback: Result<Int> -> ())
复制代码
知识点: 对于异步的错误处理来讲,Result 可能会是更好的选择,可是若是你已经在你的同步方法中使用throws了,再去你的异步函数中使用Result 会让你的API使用起来更加困难

若是你只有一个回调的话,使用下面这种会友好一些:同步

func compute { (theResult: () throws -> Int) in 
    do {
        let result = try theResult()
        print ( result ) 
    } catch {
        print("An error happened: \(error)")
    } 
}
复制代码

文章源文件地址,你们若是有更好的想法和观点欢迎交流

相关文章
相关标签/搜索