博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[swift 进阶]读书笔记-第八章:错误处理 C8P9 高阶函数和错误
阅读量:5916 次
发布时间:2019-06-19

本文共 900 字,大约阅读时间需要 3 分钟。

第八章:错误处理 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)")    } }复制代码

转载地址:http://pjzvx.baihongyu.com/

你可能感兴趣的文章
reload() 函数
查看>>
周记都在学习进度表里
查看>>
Git----将本地代码推送到远程仓库
查看>>
通过易宝实现网上支付
查看>>
[转]写给那些看不懂委托的同学
查看>>
html 隐藏滚动条
查看>>
spring源码分析(一)
查看>>
Mysql运维管理-生产场景Mysql主从复制读写分离授权方案及实战15
查看>>
[leetcode-102-Binary Tree Level Order Traversal]
查看>>
[leetcode-645-Set Mismatch]
查看>>
PostgreSQL完整备份与还原过程
查看>>
记录各搜索蜘蛛爬行记录php代码
查看>>
Super Jumping! Jumping! Jumping! 基础DP
查看>>
unity 实战功能TileMap在真机无法显示或者代码无法创建
查看>>
基于后端云的Android注册登录开发
查看>>
Feign 注解翻译器 三
查看>>
M4——GPIO配置
查看>>
用canvas绘制一个时钟
查看>>
julia下载QQ.jl
查看>>
词法作用域和动态作用域
查看>>