Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

523
Visualizações
¿Cómo soluciono "La expresión que requiere el actor global 'MainActor' no puede aparecer en la expresión de valor predeterminado de la propiedad '_audioPlaybackManager'"?

Creé una clase llamada "AudioPlaybackManager", que es una clase MainActor como StateObject cuando se inicia la aplicación. Estoy recibiendo esta advertencia. ¿Cómo puedo solucionar esto?

 @main struct Pro_Music_2App: App { @StateObject var audioPlaybackManager = AudioPlaybackManager() //This line is giving warning to me @StateObject var dataController = DataController() var body: some Scene { WindowGroup { ContentView() .environmentObject(audioPlaybackManager.manager) .environmentObject(audioPlaybackManager) .environmentObject(audioPlaybackManager.manager.playlistManager) .environmentObject(audioPlaybackManager.musicPlayerViewManager) .environmentObject(audioPlaybackManager.scrubberViewModel) .environment(\.managedObjectContext, dataController.container.viewContext) } } } @MainActor class AudioPlaybackManager: ObservableObject { ... }
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

La solución sugerida es no proporcionar ningún valor predeterminado a la propiedad y, en su lugar, establecer su valor en el inicializador.

Consulte las notas de la versión de Xcode en Swift 5.6 -> Problemas resueltos.

Para su código, la solución es así:

 @main struct Pro_Music_2App: App { @StateObject var audioPlaybackManager: AudioPlaybackManager @StateObject var dataController = DataController() init() { self._audioPlaybackManager = StateObject(wrappedValue: AudioPlaybackManager()) } var body: some Scene { WindowGroup { ContentView() .environmentObject(audioPlaybackManager.manager) .environmentObject(audioPlaybackManager) .environmentObject(audioPlaybackManager.manager.playlistManager) .environmentObject(audioPlaybackManager.musicPlayerViewManager) .environmentObject(audioPlaybackManager.scrubberViewModel) .environment(\.managedObjectContext, dataController.container.viewContext) } } } @MainActor class AudioPlaybackManager: ObservableObject { ... }

El problema subyacente es que los inicializadores no son async . Por lo tanto, no puede saltar entre diferentes actores. Y dado que el compilador sintetiza un inicializador para los valores predeterminados, esto también afecta los valores predeterminados. Es decir, si, por ejemplo, su DataController se anotó con un actor global diferente a @MainActor , entonces el inicializador tuvo que saltar entre @MainActor y cualquier actor que esté usando en DataController . Eso, sin embargo, es imposible porque init no puede ser async .

Supongo que sería difícil implementar esta verificación de un solo actor para los valores predeterminados de las propiedades almacenadas en el compilador, por lo tanto, simplemente decidieron no permitir los valores predeterminados protegidos por el actor en este contexto. Como resultado, tenemos que escribir el inicializador nosotros mismos.

Para referencia, consulte: https://github.com/apple/swift-evolution/blob/main/proposals/0327-actor-initializers.md#stored-property-isolation

over 4 years ago · Santiago Trujillo Relatório

0

Tuve el mismo problema y lo he solucionado de esta manera:

 @MainActor class MultipleDownloadsViewModel: NSObject, ObservableObject { @Published var downloads: [DownloadModel] // Init of properties in actor: see https://stackoverflow.com/questions/71396296/how-do-i-fix-expression-requiring-global-actor-mainactor-cannot-appear-in-def/71412877#71412877 @MainActor override init() { downloads = [ DownloadModel(fileToDownload: "https://speed.hetzner.de/100MB.bin"), DownloadModel(fileToDownload: "https://speed.hetzner.de/1GB.bin"), DownloadModel(fileToDownload: "https://speed.hetzner.de/10GB.bin") ] } ... }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda