I have the following swift file which is initializing an array with a set of teams results. I'd like to show it in a separate view having it ordered by "punteggio" filed and organized according to the position achieved (e.g. promotion, playoff, playout, relegation).
Here below the code of the data struct:
import Foundation
struct Squadre: Identifiable, Hashable, Equatable {
let id = UUID()
let stagione: String
let squadra: String
let vinte: Int
let pareggiate: Int
let perse: Int
let golfatti: Int
let golsubiti: Int
let diffreti: Int
let punti: Int
let punteggio: Double
init(stagione: String, squadra: String, vinte: Int, pareggiate: Int, perse: Int, golfatti: Int, golsubiti: Int, diffreti: Int, punti: Int, punteggio: Double) {
self.stagione = stagione
self.squadra = squadra
self.vinte = vinte
self.pareggiate = pareggiate
self.perse = perse
self.golfatti = golfatti
self.golsubiti = golsubiti
self.diffreti = golfatti - golsubiti
self.punti = (vinte * 3) + (pareggiate)
self.punteggio = Double(punti + (golfatti / 100) + (diffreti / 1000))
}
static func test() -> [Squadre] {
[ Squadre(stagione: "2023/2024", squadra: "Caste", vinte: 10, pareggiate: 7, perse: 4, golfatti: 34, golsubiti: 27, diffreti: 7, punti: 37, punteggio: 37.347),
Squadre(stagione: "2023/2024", squadra: "Sole", vinte: 10, pareggiate: 7, perse: 4, golfatti: 34, golsubiti: 28, diffreti: 6, punti: 37, punteggio: 37.346),
Squadre(stagione: "2023/2024", squadra: "Spina", vinte: 11, pareggiate: 6, perse: 4, golfatti: 34, golsubiti: 27, diffreti: 7, punti: 39, punteggio: 39.347),
Squadre(stagione: "2023/2024", squadra: "Vigu", vinte: 9, pareggiate: 6, perse: 6, golfatti: 14, golsubiti: 22, diffreti: -5, punti: 33, punteggio: 33.347),
Squadre(stagione: "2023/2024", squadra: "Nizza", vinte: 9, pareggiate: 6, perse: 6, golfatti: 13, golsubiti: 22, diffreti: -9, punti: 33, punteggio: 33.344),
Squadre(stagione: "2023/2024", squadra: "Vigno", vinte: 8, pareggiate: 7, perse: 6, golfatti: 14, golsubiti: 14, diffreti: 0, punti: 25, punteggio: 25.347),
Squadre(stagione: "2023/2024", squadra: "Audace", vinte: 8, pareggiate: 7, perse: 6, golfatti: 14, golsubiti: 22, diffreti: -8, punti: 25, punteggio: 25.247),
Squadre(stagione: "2023/2024", squadra: "Casalo", vinte: 11, pareggiate: 6, perse: 4, golfatti: 37, golsubiti: 22, diffreti: 12, punti: 39, punteggio: 39.347),
Squadre(stagione: "2023/2024", squadra: "Liba", vinte: 1, pareggiate: 6, perse: 14, golfatti: 4, golsubiti: 32, diffreti: -28, punti: 9, punteggio: 9.347),
Squadre(stagione: "2023/2024", squadra: "Quar", vinte: 7, pareggiate: 5, perse: 9, golfatti: 14, golsubiti: 14, diffreti: 0, punti: 26, punteggio: 26.347)]
}
}
This is the code of the view. Everything is working fine except for the list of squadre which has not the values properly displayed.
In fact in displaying the classification "Vigno" and "Audace" are displayed with 31 "punti", while they should have 25.
import SwiftUI
struct ClassificaView: View {
@State var squadre: [Squadre] = Squadre.test()
var body: some View {
let ClassificaSquadre = squadre.sorted {$0.punteggio > $1.punteggio}
let numeroSquadre: Int = ClassificaSquadre.count
let promozioneSquadre: Int = 1
let playoffSquadre: Int = 4
let playoutSquadre: Int = 2
let retrocessioneSquadre: Int = 1
ScrollView(.horizontal){
List{
Grid {
GridRow{
Text("Squadra")
.gridCellAnchor(UnitPoint(x: 0, y: 0.5))
Text("Punti")
Text("Vinte")
Text("Pareggiate")
Text("Perse")
Text("Gol fatti")
Text("Gol subiti")
Text("Differenza reti")
}
.bold()
Divider()
//Prima posizione
ForEach(
ClassificaSquadre
.enumerated()
.filter{
(0...promozioneSquadre - 1).contains($0.offset)
}
.map{$1}) { squadra in
GridRow{
Text(squadra.squadra)
.gridCellAnchor(UnitPoint(x: 0, y: 0.5))
Text(squadra.punti, format: .number)
Text(squadra.vinte, format: .number)
Text(squadra.pareggiate, format: .number)
Text(squadra.perse, format: .number)
Text(squadra.golfatti, format: .number)
Text(squadra.golsubiti, format: .number)
Text(squadra.diffreti, format: .number)
}
}
Divider()
.overlay(Color.green)
//Playoff
ForEach(
ClassificaSquadre
.enumerated()
.filter{
(promozioneSquadre...playoffSquadre).contains($0.offset)
}
.map{$1}) { squadra in
GridRow{
Text(squadra.squadra)
.gridCellAnchor(UnitPoint(x: 0, y: 0.5))
Text(squadra.punti, format: .number)
Text(squadra.vinte, format: .number)
Text(squadra.pareggiate, format: .number)
Text(squadra.perse, format: .number)
Text(squadra.golfatti, format: .number)
Text(squadra.golsubiti, format: .number)
Text(squadra.diffreti, format: .number)
}
if squadra != ClassificaSquadre.last {
Divider()
.overlay(Color.orange)
}
}
//Permanenza in categoria
ForEach(
ClassificaSquadre
.enumerated()
.filter{
(playoffSquadre + 1...numeroSquadre - playoutSquadre - retrocessioneSquadre - 1).contains($0.offset)
}
.map{$1}) { squadra in
GridRow{
Text(squadra.squadra)
.gridCellAnchor(UnitPoint(x: 0, y: 0.5))
Text(squadra.punti, format: .number)
Text(squadra.vinte, format: .number)
Text(squadra.pareggiate, format: .number)
Text(squadra.perse, format: .number)
Text(squadra.golfatti, format: .number)
Text(squadra.golsubiti, format: .number)
Text(squadra.diffreti, format: .number)
}
if squadra != ClassificaSquadre.last {
Divider()
}
}
//Playout
ForEach(
ClassificaSquadre
.enumerated()
.filter{
(numeroSquadre - retrocessioneSquadre - playoutSquadre...numeroSquadre - retrocessioneSquadre - 1).contains($0.offset)
}
.map{$1}) { squadra in
GridRow{
Text(squadra.squadra)
.gridCellAnchor(UnitPoint(x: 0, y: 0.5))
Text(squadra.punti, format: .number)
Text(squadra.vinte, format: .number)
Text(squadra.pareggiate, format: .number)
Text(squadra.perse, format: .number)
Text(squadra.golfatti, format: .number)
Text(squadra.golsubiti, format: .number)
Text(squadra.diffreti, format: .number)
}
if squadra != ClassificaSquadre.last {
Divider()
.overlay(Color.yellow)
}
}
//Retrocessione
ForEach(
ClassificaSquadre
.enumerated()
.filter{
(numeroSquadre - retrocessioneSquadre...numeroSquadre - 1 ).contains($0.offset)
}
.map{$1}) { squadra in
GridRow{
Text(squadra.squadra)
.gridCellAnchor(UnitPoint(x: 0, y: 0.5))
Text(squadra.punti, format: .number)
Text(squadra.vinte, format: .number)
Text(squadra.pareggiate, format: .number)
Text(squadra.perse, format: .number)
Text(squadra.golfatti, format: .number)
Text(squadra.golsubiti, format: .number)
Text(squadra.diffreti, format: .number)
}
if squadra != ClassificaSquadre.last {
Divider()
.overlay(Color.red)
}
}
}
}
.listStyle(.inset)
.scrollContentBackground(.hidden)
.frame(width: 900, height: 300)
.navigationTitle("Classifica")
}
}
}
Could you please let me know what I'm doing wrong? I'm getting crazy since two days.
Thanks, A.