Autocomplete with SwiftData

Dear all, I'm building an app leveraging SwiftData and I have the following two classes:

  1. Stagione:
import SwiftData

@Model
class Stagione {
    @Attribute(.unique) var idStagione: String
    var categoriaStagione: String
    var miaSquadra: String
    @Relationship(deleteRule: .cascade) var rosa: [Rosa]?
    @Relationship(deleteRule: .cascade) var squadra: [Squadre]?
    @Relationship(deleteRule: .cascade) var partita: [CalendarioPartite]?
    
    init(idStagione: String, categoriaStagione: String, miaSquadra: String) {
        self.idStagione = idStagione
        self.categoriaStagione = categoriaStagione
        self.miaSquadra = miaSquadra
    }
}
  1. Squadre:
import SwiftData

@Model
class Squadre {
    var squadraCampionato: String
    var stagione: Stagione?
    
    init(squadraCampionato: String) {
        self.squadraCampionato = squadraCampionato
    }
}

Now, I have a view in which I'm calling a sheet to insert some Squadre:

                    // Presenta il foglio per aggiungere una nuova partita
                    GroupBox(label: Text("Dettagli Partita").font(.headline).padding()) {
                        VStack {
                            HStack {
                                Text("Giornata:")
                                TextField("Giornata", text: $idGiornata)
                                    .frame(width: 30)
                                    .textFieldStyle(RoundedBorderTextFieldStyle())
                                    .padding()
                            }
                            DatePicker("Data Partita:", selection: $dataPartita, displayedComponents: .date)
                                .padding()
                            HStack {
                                Text("Squadra Casa:")
                                    .frame(width: 150)
                                TextField("Squadra Casa", text: $squadraCasa)
                                    .textFieldStyle(RoundedBorderTextFieldStyle())
                                    .padding()
                                TextField("Gol Casa", text: $golCasa)
                                    .textFieldStyle(RoundedBorderTextFieldStyle())
                                    .padding()
                            }
                            HStack {
                            Text("Squadra Trasferta:")
                                    .frame(width: 150)
                            TextField("Squadra Trasferta", text: $squadraTrasferta)
                                .textFieldStyle(RoundedBorderTextFieldStyle())
                                .padding()
                                TextField("Gol Trasferta", text: $golTrasferta)
                                    .textFieldStyle(RoundedBorderTextFieldStyle())
                                    .padding()
                        }
                            HStack {
                            Button("Salva") {
                                if let partitaSelezionata = partitaSelezionata {
                                    // Se è stata selezionata una partita, aggiorna i suoi dati
                                    if let index = partite.firstIndex(where: { $0.id == partitaSelezionata.id }) {
                                    partite[index].idGiornata = Int(idGiornata) ?? 0
                                        partite[index].dataPartita = dataPartita
                                        partite[index].squadraCasa = squadraCasa
                                        partite[index].golCasa = Int(golCasa) ?? 0
                                        partite[index].squadraTrasferta = squadraTrasferta
                                        partite[index].golTrasferta = Int(golTrasferta) ?? 0
                                    }
                                } else {
                                    // Altrimenti, aggiungi una nuova partita
                                    aggiungiPartita(stagione: stagione)
                                }
                                // Chiudi il foglio di presentazione
                                mostraAggiungiPartita = false
                                // Resetta il campo di input
                                idGiornata = ""
                                dataPartita = Date()
                                squadraCasa = ""
                                golCasa = ""
                                squadraTrasferta = ""
                                golTrasferta = ""
                            }
                            .buttonStyle(.borderedProminent)
                            .disabled(idGiornata.isEmpty || squadraCasa.isEmpty || squadraTrasferta.isEmpty || golCasa.isEmpty || golTrasferta.isEmpty)
                                
                            // Bottone Chiudi
                            Button("Chiudi") {
                                mostraAggiungiPartita = false
                            }
                                .buttonStyle(.borderedProminent)
                        }
                        }
                        .padding()
                    }
                }

I'd like to insert a autocomplete function in the textfields "Squadra Casa" and "Squadra Trasferta", based on the list of Squadre contained in the class "Squadre" and filtered for a specific Stagione.

Has anybody of you made something similar? Do you have any suggestions or code example which I can use?

Thanks, A.

Add a Comment