如何在 Swift 中的 Task 修饰符中调用 defer ?我想延迟执行清理操作。这包括将loadingState设置为.idle并将selectedImage设置为nil等。无论是否抛出异常,延迟代码都应该触发。
Task {
do {
defer {
print("DEFER")
self.selectedImage = nil
loadingState = .idle
chatText = ""
}
try await sendMessage()
print("")
} catch {
print(error.localizedDescription)
}
}
Run Code Online (Sandbox Code Playgroud)
但我收到以下编译错误:
主要参与者隔离的属性“loadingState”不能从主要参与者发生突变
任何帮助表示赞赏。
更新:
Task { @MainActor in
do {
defer {
print("DEFER")
loadingState = .idle
self.selectedImage = nil
loadingState = .idle
chatText = ""
}
try await sendMessage()
} catch {
print(error.localizedDescription)
}
}
Run Code Online (Sandbox Code Playgroud)
更新2
这是产生类似错误的最少代码:
enum SampleError: Error {
case operationFailed
}
func doSomething() …Run Code Online (Sandbox Code Playgroud) 我将 Realm 与 SwiftUI 结合使用并创建父子关系。我正在创建以下属性,以便它可以返回列表。我创建属性的原因是因为我想对其执行过滤和排序,稍后我将执行此操作。
var items: List<ShoppingItem> {
shoppingList.items
}
Run Code Online (Sandbox Code Playgroud)
我收到一条奇怪的错误消息: