Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

518
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda