1 asynchronous onchange task async-await swiftui
在 SwiftUI 中,我尝试使用 .onChange 调用异步函数(用于加载 ImagePicker 选取的图像)。我收到“在不支持并发的函数中调用‘异步’”错误。如果我进行功能同步并删除“Task {@MainActor in”部分,那么它会运行,但在加载图像期间会出现一些我不想要的紫色错误。
是否可以使用 .onChange 来调用异步函数?
func loadImage() async {
Task { @MainActor in
guard let inputImage = inputImage else {
loadingState = .failed
return
}
jpegData = inputImage.jpegData(compressionQuality: 0.8)!
image = Image(uiImage: inputImage)
loadingState = .loaded
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试按如下方式调用该函数;
.onChange (of: addPersonViewModel.inputImage, perform: { _ in addPersonViewModel.loadImage() })
Run Code Online (Sandbox Code Playgroud)
如果我进行功能同步并删除“Task {@MainActor in”部分,那么它会运行,但在加载图像期间会出现一些我不想要的紫色错误。
代替
.onChange (of: addPersonViewModel.inputImage, perform: { _ in addPersonViewModel.loadImage() })
Run Code Online (Sandbox Code Playgroud)
使用
.task(id:addPersonViewModel.inputImage){
await addPersonViewModel.loadImage() }
Run Code Online (Sandbox Code Playgroud)
您必须对您的功能进行轻微修改
func loadImage() async {
guard let inputImage = inputImage else {
loadingState = .failed
return
}
jpegData = inputImage.jpegData(compressionQuality: 0.8)!
image = Image(uiImage: inputImage)
loadingState = .loaded
}
Run Code Online (Sandbox Code Playgroud)
Task在函数内部浮动并不是一个好的做法。
| 归档时间: |
|
| 查看次数: |
942 次 |
| 最近记录: |