es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede convertir el valor de tipo ‘()’ a un tipo de argumento esperado ‘(() -> Void)?’ en SwiftUI.

Estoy obteniendo el error “No se puede convertir el valor de tipo ‘()’ en el tipo de argumento esperado ‘(() -> Void)?’ al usar la función perform en la función onAppear. A continuación se muestra el código.

Esta es la vista que mostrará imágenes/videos/archivos PDF.

struct AssetView: View {
    @ObservedObject var messageAttachmentViewModel: MessageAttachmentViewModel
    var index: Int
    var body: some View {
        let messageAttachmentModel = messageAttachmentViewModel.commonMessageAttachmentModel[index]
        switch messageAttachmentModel.uploadStatus {
        case .idle:
            Color.clear.onAppear(perform: messageAttachmentViewModel.uploadFileData(index: index)) // ERROR
        case .failed(let error):
            ProgressView()
        case .loading(let progress):
         //   print(progress)
            ProgressView(value: progress.fractionCompleted, total: Double(progress.totalUnitCount))
        case .loaded:
            ZStack(alignment: .trailing) {
                if messageAttachmentModel.assetType == .Photo {
                    PhotoView(messageAttachment: messageAttachmentModel)
                } else if messageAttachmentModel.assetType == .Video {
                    VideoView(messageAttachment: messageAttachmentModel)
                } else if messageAttachmentModel.assetType == .PDF {
                    PDFView(messageAttachment: messageAttachmentModel)
                }
            }
            .background(Color.red)
            .frame(width: 150, height: 150)
        }
    }
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Estás recibiendo un error “No se puede convertir el valor de tipo ‘()’ al tipo de argumento esperado ‘(() -> Void)?'” porque el argumento perform en el modificador onAppear espera un cierre de tipo (() -> Void)?, pero messageAttachmentViewModel.uploadFileData(index: index) devuelve un valor de tipo Void.

    Para solucionar este error, envuelve la llamada messageAttachmentViewModel.uploadFileData(index: index) en un cierre de esta manera:

    Color.clear.onAppear {
        messageAttachmentViewModel.uploadFileData(index: index)
    }
    

    Esto pasará un cierre que ejecutará la función uploadFileData cuando la vista aparezca.

Comments are closed.