我有以下 swift 文件,它使用一组团队结果初始化一个数组。 我想在单独的视图中显示它,并根据所达到的位置(例如升级、季后赛、淘汰赛、降级)按“punteggio”排序和组织。
下面是数据结构的代码:
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)]
}
}
这是视图的代码。 除了中队列表没有正确显示值之外,一切工作正常。
事实上,在显示分类时,“Vigno”和“Audace”显示有 31 个“punti”,而它们应该有 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")
}
}
}
你能让我知道我做错了什么吗? 这两天我都快疯了
谢谢, A.