You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 04:52:32