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

如何为Wrapped为泛型Task的Optional类型编写扩展并使用其底层类型?

为包装泛型Task的Optional编写扩展并访问Task底层类型

核心需求

能否为Optional类型编写扩展,使其Wrapped类型为泛型结构体Task,并在扩展内部使用Task的底层关联类型?

最初尝试(无法运行)

需要的是参数化扩展,而非在普通Optional扩展内定义泛型方法,但以下代码报错:Cannot find type 'E' in scope

extension Optional where Wrapped == Task<T, E> {

}

更新1:限定Task类型但无法访问关联类型

尝试限定Wrapped为Task<Sendable, Error>,但无法获取被包装Task的底层类型来构造方法,报错:'Success' is not a member type of type 'Wrapped'

extension Optional where Wrapped == Task<Sendable, Error> {
    func value(or operation: @escaping @Sendable () async -> Wrapped.Success) async throws {
        let task: Task<Wrapped.Success, Wrapped.Failure>
    }
}

更新2:具体实现示例及类型不匹配报错

以下代码尝试实现一个方法,当Optional包含Task时复用该Task,否则执行传入的异步操作创建新Task,但在赋值已有Task时出现类型不匹配错误:Cannot assign value of type 'Task<any Sendable, any Error>' to type 'Task<Success, any Error>'

extension Optional where Wrapped == Task<Sendable, Error> {
    func value<Success: Sendable>(or operation: @escaping @Sendable () async throws -> Success) async throws -> Success {
        let task: Task<Success, Error>
        switch self {
        case let .some(runningTask): task = runningTask // 报错位置
        case .none:
            task = Task {
                return try await operation()
            }
        }
        return try await task.value
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:45:24