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

667
Visualizações
¿Cómo puedo usar async/await con SwiftUI en Swift 5.5?

He estado probando la funcionalidad asíncrona/en espera vista previa en la versión Swift 5.5, pero no puedo recopilar los resultados de una función asíncrona y mostrarlos usando SwiftUI. Aquí está mi código:

 import SwiftUI struct AsyncTestView: View { @State var text: String? // Async function func asyncGetText() async -> String { Thread.sleep(forTimeInterval: 10) return "My text" } // Stores the result of async function func fetchText() async { let text = await asyncGetText() DispatchQueue.main.async { self.text = text } } var body: some View { Text(text ?? "Loading") .onAppear(perform: fetchText) } }

Esto da como resultado el siguiente error:

llamada 'asincrónica' en una función que no admite concurrencia
Agregue 'async' a la función 'fetchText ()' para que sea asíncrona

Agregar async a la función fetchText() da como resultado el siguiente error en la función .onAppear() :

Conversión no válida de la función 'async' del tipo '() async -> ()' al tipo de función síncrona '() -> Void'

En este artículo , usan la etiqueta @asyncHandler para anotar la función fetchText ; sin embargo, esto da como resultado la advertencia: '@asyncHandler' has been removed from the language' .

over 4 years ago · Santiago Trujillo
4 Respostas
Responde à pergunta

0

Soy el autor del artículo al que haces referencia.

Como se discutió en Descubrir la concurrencia en SwiftUI , las vistas pueden hacer uso de los nuevos .task { } y .refreshable { } para obtener datos de forma asíncrona.

Así que ahora tiene las siguientes opciones para llamar a su código asíncrono:

 func someSyncMethod() { doSomeSyncWork() Task { await methodThatIsAsync() } }
 List { } .task { await methodThatIsAsync() }
 List { } .refreshable { await methodThatIsAsync() }

Si usa un modelo de vista independiente, asegúrese de marcarlo como @MainActor para garantizar que las actualizaciones de propiedades se ejecuten en el actor principal.

Actualicé el código de mi artículo: https://github.com/peterfriese/Swift-Async-Await-Experiments

over 4 years ago · Santiago Trujillo Relatório

0

Según la nueva información en la sesión WWDC Meet async/await en Swift WWDC , a las 23:28, esto ahora se hace usando:

 async { someState = await someAsyncFunction() }

Captura de pantalla de la sesión.

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Relatório

0

Estoy de acuerdo con la respuesta de @peter-friese, pero agregaré para aquellos que lean esto el cambio de sintaxis al pasar de sincronización a sincronización:

La nueva sintaxis:

 Task { someState = await someAsyncFunction() }

Reemplaza esta sintaxis:

 async { someState = await someAsyncFunction() }

... y el inicializador Task() puede aceptar un parámetro de prioridad:

 Task(priority: .userInitiated) { someState = await someAsyncFunction() }
over 4 years ago · Santiago Trujillo Relatório

0

import SwiftUI struct AsyncTestView: View { @State var text = "Loading" // Async function func asyncGetText() async -> String { try? await Task.sleep(nanoseconds: 3 * NSEC_PER_SEC) return "My text" } var body: some View { Text(text) .task { text = await asyncGetText() } } }
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