我想上传像pdf或jpg这样的文件到我的Firebase,并更新我的Collection ‘solde’,它存储来自元素ID的所有数据.我的前脸是这样的:
//
// UserSolde.swift
// ML2V_IOS
//
// Created by Clément Enjolras on 05/09/2023.
//
import SwiftUI
import FirebaseStorage
import UIKit
import MobileCoreServices
struct UserSolde: View {
@EnvironmentObject var viewModel: AuthViewModel
@StateObject var soldemodel = SoldeModel()
@State private var soldes: [Solde] = []
@State private var isDocumentPickerPresented = false
@State private var selectedURL: URL?
@State private var selectedSoldeID: String? = nil
var body: some View {
content.onAppear{
Task{
do{
try await soldemodel.getAllSolde()
soldes = soldemodel.resultsolde
}catch{
print("Erreur lors de la récupération des soldes : \(error)")
}
}
}
}
var content: some View{
VStack{
HStack{
Text("Mes Soldes").font(.system(size: 24).bold())
Spacer()
Image(systemName: "creditcard")
.font(.system(size: 32))
.foregroundColor(.black)
.frame(width: 32, height: 32)
.background(Color(.white))
}.padding(.horizontal)
List($soldes){ solde in
HStack{
VStack{
Text("Total du solde en cours").font(.system(size: 14)).multilineTextAlignment(.center)
//error here
Text("\(solde.total)").padding(.top,5).font(.system(size: 12)).foregroundColor(.gray).multilineTextAlignment(.center)
}
Spacer()
VStack{
Text("Etat de la demande").font(.system(size: 14)).multilineTextAlignment(.center)
//same error here
Text("\(solde.etat)").padding(.top,5).font(.system(size: 12)).foregroundColor(.gray).multilineTextAlignment(.center)
}
Spacer()
VStack{
Text("Date d'émission").font(.system(size: 14)).multilineTextAlignment(.center)
//also here
Text("\(solde.date)").padding(.top,5).font(.system(size: 12)).foregroundColor(.gray).multilineTextAlignment(.center)
}
Spacer()
Button {
selectedSoldeID = solde.id
isDocumentPickerPresented.toggle()
} label: {
Text("Envoyer la facture").multilineTextAlignment(.center)
}.sheet(isPresented: $isDocumentPickerPresented) {
DocumentPickerView(selectedURL: $selectedURL,soldeDataId:$selectedSoldeID)
}
}
}
Button {
} label: {
HStack{
Text("DEMANDER MON SOLDE").fontWeight(.semibold)
Image(systemName: "arrow.right")
}.foregroundColor(.white)
.frame(width: UIScreen.main.bounds.width - 32, height: 48)
}.background(Color(.systemBlue)).cornerRadius(10).padding(.top,24)
NavigationLink {
UserDashboard().navigationBarBackButtonHidden(true)
} label: {
HStack(spacing: 3){
Text("Retour à la page")
Text("Principale").fontWeight(.bold)
}.font(.system(size: 14))
}
}
}
}
private func formatDate(_ date: Date) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"
return dateFormatter.string(from: date)
}
//Mettre à jour firestore et firebase avec la facture
func uploadInvoice(url:String,iddocument:String,filename:String){
}
struct DocumentPickerView: UIViewControllerRepresentable {
@Binding var selectedURL: URL?
@Binding var soldeDataId: String?
func makeUIViewController(context: Context) -> some UIViewController {
let controller = UIDocumentPickerViewController(forOpeningContentTypes: [.png,.pdf,.jpeg,], asCopy: true)
controller.delegate = context.coordinator
return controller
}
func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {
// No update needed
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, UIDocumentPickerDelegate {
let parent: DocumentPickerView
init(_ parent: DocumentPickerView) {
self.parent = parent
}
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
if let selectedURL = urls.first {
parent.selectedURL = selectedURL
}
}
}
}
struct UserSolde_Previews: PreviewProvider {
static var previews: some View {
UserSolde()
}
}
目标是将我的文件与我的Firebase链接起来.为了实现这一点,我想存储我的solde id,就像我已经做的那样,但是当我在我的docupicker中存储$seltedsoldeid时,我得到了这个错误:在对实例方法‘appendInterpolation’的调用中没有精确匹配. 我是Swift 的新手,你能解释一下为什么吗?一旦我拿到我的‘士兵’的身份证,我就会没事的
我已经多次try 更改我的代码,但问题是传递id来修改我的集合和链接数据