我正在尝试将异步 do/catch/defer 操作添加到 UIButton 上。然而,如果我只是在 defer 块中调用一个方法,我会收到“在同步非隔离上下文中调用主要角色隔离实例方法 XXX”的错误。我发现的解决方法是将其包装在另一个 Task 块中,如下所示。只想确认这是否是正确的方法?如果有人能解释一下这个错误消息实际上是什么意思,那就太好了。
@objc private func post(_ sender: UIButton) {
Task {
// defer { dismiss(animated: true) } -- Doesn't work
defer { Task { await dismiss(animated: true) } }
do {
try await doSomethingAsync()
} catch {
print(error)
}
}
}
async
方法一样。 - George