Tenho a seguinte classe de modelo SwiftUI Observable junto com variáveis de ator local e global que falham ao construir com o erro Global actor 'MyGlobalActor'-isolated default value in a nonisolated context
. Minha pergunta é o que há de especial no ator global que a construção falha, mas a construção é bem-sucedida para o ator local? O método init no ator local é executado no contexto padrão, mas o ator global é executado em contexto isolado?
import SwiftUI
@Observable
final class Model {
let testActor = TestLocalActor() //This builds
let testGlobalActor = TestGlobalActor() //Build fails here
}
actor TestLocalActor {
init() {
}
}
@MyGlobalActor
final class TestGlobalActor {
init() {
}
}
@globalActor
actor MyGlobalActor: GlobalActor {
static let shared = MyGlobalActor()
}
Correto. Mais precisamente, não-
async
inicializadores deactor
s são considerados não-isolados ( veja também ), enquanto que uma vez que você isola a classe inteira para um ator global, a classe'init
também é isolada para o ator global.Você pode adicionar o
nonisolated
modificador aoinit
, se quiser excluí-lo do isolamento do ator global.