Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

531
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!