本小节主要讲了在遇到异步耗时操做
可能抛出错误
时候的处理。(书中也提到了并无什么完美
的处理,只有对应不一样场景相对合适
一些的处理方式)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> -> ())
复制代码
同步方法中使用throws了
,再去你的异步函数中使用Result 会让你的API使用起来更加困难
。若是你只有一个回调
的话,使用下面这种会友好一些:同步
func compute { (theResult: () throws -> Int) in
do {
let result = try theResult()
print ( result )
} catch {
print("An error happened: \(error)")
}
}
复制代码