[swift 进阶]读书笔记-第八章:错误处理 C8P8 错误链 Chaining Errors

第八章:错误处理 Error Handling

8.8 错误链 Chaining Errors

本小节主要讲了如何优雅的处理链式调用多个可能抛出错误的方法。swift

其实swift 的内建(build-in)错误处理处理机制就已经很好的将链式调用可能抛错的方法,咱们直接用一个大的do/catch块把这一段包裹住就行。
可是做为一个优秀的开发者,咱们能够用更优雅的解决方案去处理这种场景。

还记得以前学的Result类么? 咱们能够经过Result类去包装返回值,让你的代码变得更加优雅 more elegant。ui

具体Demo以下spa

///未经过Result包装error的检查文件和返回pid的方法
func checkFilesAndFetchProcessID(filenames: [String]) -> Int {
     do {
    try filenames.all(checkFile)
        let contents = try contentsOfFile("Pidfile") 
        return try optional(Int(contents),
        orError: ReadIntError.CouldNotRead) }
     catch {
        return 42 // 默认值 
    }
}

///经过Result包装error的检查文件和返回pid的方法,毫无try catch 痕迹可言。 
func checkFilesAndFetchProcessID(filenames: [String]) -> Result<Int> { 
    return filenames
    . all (checkFile)
    .flatMap { _ in contentsOfFile("Pidfile") } 
    .flatMap { contents in
    Int ( contents).map(Result.Success) ?? .Failure(ReadIntError.CouldNotRead)
    } 
}
复制代码
注: 这里其实是经过一系列的flatMap方法去过滤掉error, 在实际开发中,咱们能够经过一样能够经过flatmap作不少关于去除nil的骚操做, 这个知识点以前有听过瞄神提过。 忘了具体使用场景,知道同窗们能够补充分享。 Thx~
相关文章
相关标签/搜索