SwiftUI - Clicker

Oyé, Oyé Ami(e)s codeurs(ses),

Depuis le temps que je suis les cours de @mbritto, je peux dire que nous sommes devenus presque intimes… c’est pourquoi je n’hésite pas à lui poser des questions en MP… mais là, pour le coup, il s’est retrouvé coincé tant la question était précise et hautement technique. Il s’est senti démuni et m’a demandé de directement communiquer avec le forum ou bon nombre d’élèves semblent avoir dépassés le maître… :joy::joy::joy:.

Bref, dans clicker, j’aimerais pouvoir classer les meilleurs scores par ordre décroissant avec un argument de type Sort je suppose mais je n’ai pas trouvé la réponse dans la doc d’Apple. Quelqu’un aurait-il une solution ?

Merci par avance.
@mbritto sans rancune :wink:. J’ai toujours rêvé de charrier un peu les profs surtout quand ils sont aussi bons.

ça ?
https://www.hackingwithswift.com/example-code/arrays/how-to-sort-an-array-using-sort

Yes, il faut pour ça faire de la persistance de données, par exemple avec CoreData, et se servir des méthodes de tri fournies par CoreData.
Sinon, tu concoctes toi-même une méthode de tri, par exemple si tu te sers de plist ou d’un fichier pour conserver tes scores en JSON par exemple.
Es-tu sûr que ça vaille la peine pour Clicker ?

Petit exemple en triant la liste, juste avant de l’afficher :

Au lieu de faire un List sur la liste de score, comme Maxime :

List(resultList) {
   ...

J’ai ajouté un tri, dont la condition est que le score de l’élément n de la liste doit avoir une valeur supérieure à celui du score de l’élément n+1.

List(resultList.sorted(by: { $0.score > $1.score })) {
   ...

Code complet :

import SwiftUI

struct GameResultListView: View {
  let resultList:[GameResult]
    var body: some View {
      List(resultList.sorted(by: { $0.score > $1.score }))
      { (result:GameResult) in
        Text("\(result.playerName) : \(result.score)")
      }
    }
}

struct GameResultListView_Previews: PreviewProvider {
    static var previews: some View {
      GameResultListView(resultList: [
        GameResult(playerName: "Bob", score: 30),
        GameResult(playerName: "Sophie", score: 70),
        GameResult(playerName: "Yuki", score: 20),
        GameResult(playerName: "Yan", score: 10)
      ])
    }
}

1 « J'aime »

Ah ah, aucun soucis je le prends bien :slight_smile: Je ne me souviens pas de cet échange en particulier mais en général, si je reçois une question technique en MP ou par email, je recommande le forum pour que les réponses aident aussi les autres membres :+1:
Visiblement j’ai bien fait car tu as eu de l’aide bien plus rapidement que ce que j’aurais pu faire individuellement.

C’est élégant, c’est instructif, j’en prends de la graine. Je reste encore émerveillé, avec du mal à utiliser surtout aussi habilement, la puissance des closures. Bravo. Mais, pour que ça serve vraiment dans un vrai jeu, faut persister les scores des parties précédentes, non ? Sinon, pourquoi trier, et là, les fonctions de tris sont déjà écrites…

Oui, mais là c’est dans un cadre éducatif. Un exercice d’apprentissage n’a pas vocation a être réellement opérationnel. Il sert surtout à faire travailler les méninges, et montrer des mécanismes.