转换不可发送的函数值可能会引入数据竞争
Converting non-sendable function value may introduce data races
我有一段简单的代码:
struct ContentView: View {
var body: some View {
Text("Hello world!")
.task {
await myAsyncFunc()
}
}
private func myAsyncFunc() async {}
}
编译完全没问题。但是,如果我用这个替换任务:
.task(myAsyncFunc)
它不起作用,并给我以下错误:
Converting non-sendable function value to '@Sendable () async -> Void' may introduce data races
为什么会这样,我该如何解决?
如其所述,该函数可以标记为 @Sendable
。这用于防止数据竞争。
改成这样:
@Sendable private func myAsyncFunc() async {}
注意@Sendable
必须在访问修饰符之前。
我有一段简单的代码:
struct ContentView: View {
var body: some View {
Text("Hello world!")
.task {
await myAsyncFunc()
}
}
private func myAsyncFunc() async {}
}
编译完全没问题。但是,如果我用这个替换任务:
.task(myAsyncFunc)
它不起作用,并给我以下错误:
Converting non-sendable function value to '@Sendable () async -> Void' may introduce data races
为什么会这样,我该如何解决?
如其所述,该函数可以标记为 @Sendable
。这用于防止数据竞争。
改成这样:
@Sendable private func myAsyncFunc() async {}
注意@Sendable
必须在访问修饰符之前。