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

Sequence扩展asyncParallelMap方法出现Self.Type非可发送类型捕获警告的解决求助

Sequence扩展asyncParallelMap方法出现Self.Type非可发送类型捕获警告的解决求助

大家好,我在Xcode 26中编译一段异步并行map的代码时,碰到了一个怎么都搞不定的警告,想请各位帮忙支个招!

具体的警告内容如下:

Capture of non-sendable type 'Self.Type' in an isolated closure; this is an error in the Swift 6 language mode (If I enable Swift 6 language mode it stays a warning, not an error)

我已经确认所有相关类型都遵循了Sendable协议,给transform参数加上@isolated(any)也完全没效果。目前找到的唯一临时 workaround 是把这个扩展从Sequence改成Array——甚至Collection都不好使,这就挺让人费解的。

先贴一下我的代码:

extension Sequence where Element: Sendable {
    func asyncParallelMap<T: Sendable> (
        _ transform: @escaping @Sendable (Element) async throws -> T
    ) async rethrows -> [T] {
        try await withThrowingTaskGroup(of: T.self) { group in
            for element in self {
                group.addTask {
                    try await transform(element)
                }
            }
            return try await group.reduce(into: []) { $0.append($1) }
        }
    }
}

另外说明下,这个方法返回的结果是无序的,这是我故意设计的,这块没问题。

有没有大佬能指点下,怎么在保留Sequence扩展的前提下消掉这个警告呀?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 13:59:35