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
相关产品推荐
相关产品推荐

