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

Swift中调用抛出函数,如何更简便转为Result<T, Error>类型?

简化Swift异步抛出函数到Result类型的转换

你可以通过封装通用工具逻辑,彻底摆脱重复的do/catch代码块,以下是几种简洁的实现方式:

方法一:给Result添加异步初始化扩展

给Result类型写一个通用扩展,专门处理异步抛出的任务:

extension Result where Success: Sendable, Failure == Error {
    static func async(catching operation: @Sendable () async throws -> Success) async -> Self {
        do {
            return .success(try await operation())
        } catch {
            return .failure(error)
        }
    }
}

调用时直接一行搞定:

model = await Result.async(catching: getModel)

方法二:独立工具函数

如果不想扩展系统类型,也可以写一个独立的通用函数:

func asyncResult<T: Sendable>(_ task: @Sendable () async throws -> T) async -> Result<T, Error> {
    do {
        return .success(try await task())
    } catch {
        return .failure(error)
    }
}

使用方式同样简洁:

model = await asyncResult(getModel)

方法三:内联简化写法(无复用需求时)

如果只是单次使用,不想额外封装,可以用更紧凑的内联do/catch写法:

model = await do { try await getModel() } catch { error } as Result<Model, Error>

这些方式都能帮你把重复的错误捕获逻辑抽离出来,让视图中的任务代码更简洁易读。

内容的提问来源于stack exchange,提问作者Aaron Christiansen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:25:17