Swift中如何在guard语句返回Result.failure?不使用switch-case
解决Result类型配合guard case获取failure错误的问题
你完全可以不用switch-case,直接在guard的else分支里通过模式匹配提取failure中的错误并返回,具体修改后的代码如下:
import Foundation enum CustomError: Error { case missingData case invalidData // 新增错误类型,处理Data转String失败的场景 } func somethingThatMightReturnError() -> Result<Data,CustomError> { .failure(.missingData) } func compute() -> Result<String,CustomError> { let computedValue = somethingThatMightReturnError() guard case .success(let data) = computedValue else { // 直接匹配failure分支提取错误 if case .failure(let error) = computedValue { return .failure(error) } // 兜底逻辑:Result枚举仅包含success/failure,实际不会执行到此处 fatalError("Result出现未定义的枚举分支") } // 替换强制解包,用安全方式处理Data转String guard let resultString = String(data: data, encoding: .utf8) else { return .failure(.invalidData) } // 此处可添加复杂的转换逻辑 return .success(resultString) }
关键说明
- Result是仅包含
success和failure两个分支的枚举,因此在guard case .success的else分支中,必然对应failure分支,可以安全地通过if case .failure(let error)提取错误。 - 这种方式完全可行,不需要依赖switch-case就能完成错误传递。
- 额外建议:避免用强制解包
!处理Data转String的逻辑,新增invalidData错误类型处理转换失败场景,让代码更健壮。
内容的提问来源于stack exchange,提问作者user121095
相关产品推荐
相关产品推荐

