Geo*_*e_E 18 swift swift5 swiftui swift-concurrency
我有一段简单的代码:
struct ContentView: View {
var body: some View {
Text("Hello world!")
.task {
await myAsyncFunc()
}
}
private func myAsyncFunc() async {}
}
Run Code Online (Sandbox Code Playgroud)
这编译完全没问题。但是,如果我用以下内容替换任务:
.task(myAsyncFunc)
Run Code Online (Sandbox Code Playgroud)
它不起作用,并给我以下错误:
将不可发送的函数值转换为“@Sendable () async -> Void”可能会引入数据争用
这是为什么?我该如何解决它?
Geo*_*e_E 14
正如它所述,该函数可以标记为@Sendable. 这用于防止数据竞争。
改成这样:
@Sendable private func myAsyncFunc() async {}
Run Code Online (Sandbox Code Playgroud)
请注意, 必须@Sendable位于访问修饰符之前。
| 归档时间: |
|
| 查看次数: |
4195 次 |
| 最近记录: |