Tenho uma classe MyUIClass
que é @MainActor
isolada:
@MainActor
class MyUIClass {
func show(object: Any?) {}
}
Para usar a show
função, ela precisa ser acessada dentro do MainActor
contexto:
class Santa {
@MainActor
func present1(gift: Any?) {
MyUIClass().show(object: gift) // ✅
}
func present2(gift: Any?) {
Task { @MainActor in
MyUIClass().show(object: gift) // 💥 Task or actor isolated value cannot be sent; this is an error in the Swift 6 language mode."
}
}
}
O que não entendo é que quando tento usar gift
dentro do Task
bloco em present2
, recebo o aviso
O valor isolado da tarefa ou do ator não pode ser enviado; isso é um erro no modo de linguagem Swift 6.
Na primeira função, present1
, o argumento gift: Any?
não é isolado para MainActor
(certo?) e não é Sendable
, mas não há erro. No entanto, o erro só ocorre no segundo caso, dentro do Task
bloco.
Eu sei que o título é um pouco estranho. Eu entendo que @MainActor
funções só podem ser executadas no MainActor
contexto, e Task { @MainActor in }
podem ser executadas em qualquer contexto.
Ainda assim, nesses dois casos ( present1 / present2
), parece que MyUIClass().show(object: gift)
é executado no MainActor
contexto, então por que há uma diferença no comportamento do erro?