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

第八章:错误处理 Error Handling

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

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

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

先引入一个问题

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

func compute(callback: Int -> ())

那么,如果。
compute方法可能会抛错捏
而且正好我们想要拿到这个错误的详细信息

一般情况下我们会这样写

func compute(callback: Int throws -> ())

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

这样写现在并不是指计算可能失败,而是表示回调本身可能会抛出错误

下面我们再回顾一下很久很久之前的知识点:

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

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

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

如果你只有一个回调的话,使用下面这种会友好一些:

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

文章源文件地址,大家如果有更好的想法和观点欢迎交流

你可能感兴趣的:([swift 进阶]读书笔记-第八章:错误处理 C8P9 高阶函数和错误)