本小节主要讲了如何优雅的
处理链式调用多个可能抛出错误的方法。swift
包裹
住就行。还记得以前学的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)
}
}
复制代码