通过网格布局进行分类

问题描述 投票:0回答:1

我有以下 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.

sorting swiftui multidimensional-array gridview
1个回答
0
投票

不,这是正确的。尽管您在 init 函数中传递了

punti
参数,但您并没有直接使用该字段。您使用
vinte
pareggiate
字段重新计算了它。尝试在
self.punti = (vinte * 3) + (pareggiate)
线上拖动调试点。它显示的值与 GridRow 上显示的值相同:

© www.soinside.com 2019 - 2024. All rights reserved.