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)
}
}
}
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 modificadoronAppear
espera un cierre de tipo(() -> Void)?
, peromessageAttachmentViewModel.uploadFileData(index: index)
devuelve un valor de tipoVoid
.Para solucionar este error, envuelve la llamada
messageAttachmentViewModel.uploadFileData(index: index)
en un cierre de esta manera:Esto pasará un cierre que ejecutará la función
uploadFileData
cuando la vista aparezca.