Comparer des Valeur

Bonjour, je suis débutant dans Swift ui et pour ma première app j’aimerais comparer les valeurs de 3 TextField et faire un calcul de 2 TextField (Les même que je veux comparer)

Je veux savoir si la valeur de la « Cote mesuré » est bonne, pour cela il faut que la cote mesuré soit entre la « Cote mini » et la « Cote Maxi ».

et pour calculer le « Jeu » je doit faire la « Cote maxi » moins la « Cote Mini »

Et je n’ai vraiment aucune idée de comment utiliser des « fonction de calcul / et comparaison », du coup j’aimerais savoir comment je pourrais le faire.

Merci d’avance pour votre aide

Salut @rayan,

Il faut dans un premier temps que tu compares la valeur Cote mesurée avec Cote mini et Cote maxi.
Puis, dans un second temps du calcul ton Jeu.

En swift, c’est :

if coteMesure > coteMini && coteMesure < coteMaxi {
   labelCote = "Cote Bonne"
   labelJeu = String(coteMaxi - coteMini)
} else {
   labelCote = "Cote Mauvaise"
   labelJeu = ""
}

Tou d’abord merci beaucoup pour la réponse

du coup maintenant il faut que je puisse afficher et actualiser le fait que la cote soit bonne ou fausse seulement après avoir cliquer sur mon bouton calculer et je ne sais pas comment le mettre en place

le code de la vue

//
//  Calcule.swift
//  Projet final BAC V2
//
//  Created by Rayan le 15/07/2021.
//

import SwiftUI

struct CalculeTolerance: View {
    @State private var cotePlus: String = ""
    @State private var coteMoin: String = ""
    @State private var coteMesurer: String = ""
   
    
    var body: some View {
        VStack {
        
            
            VStack {
                Form{
                    Section(header: Text("Cote du plans")){
                    HStack {
                        Image(systemName: "plus.circle.fill")
                            .renderingMode(.original)
                        TextField("Cote Maxi", text: $cotePlus)
                            .keyboardType(.numberPad)
                        
                        Divider()
                        Image(systemName: "minus.circle.fill")
                            .renderingMode(.original)
                        TextField("Cote Mini", text: $coteMoin)
                            .keyboardType(.numberPad)
                    }
                        }
                    Section(header: Text("Cote Physique")){
                    HStack {
                        Image(systemName: "equal.circle.fill")
                            .foregroundColor(Color.blue)
                            
                        TextField("Cote Mesuré", text: $coteMesurer)
                            .keyboardType(.numberPad)
                    }
                        
                    }

                    
                    
                    Section{
                    Button(action:{}) {
                        Text("Calculer")
                            .frame(maxWidth: .infinity)
                        }
                    }
                    
                    Section(header: Text("Resultat")){
                        if coteMesurer > coteMoin && coteMesurer < cotePlus {
                            Text("Cote Bonne")
                        } else {
                            Text("Cote Mauvaise")
                        }
                    }

                }.navigationBarTitle("Calcule d'une Tolérance")
               
            }
            
        }
    }
}

struct CalculeTolerance_Previews: PreviewProvider {
    static var previews: some View {
        CalculeTolerance()
            
    }
}

C’est plus compliqué que tu ne le penses. Les calculs de comparaison sont simples à faire, mais la saisie des valeurs pas vraiment.

TextField permet de saisir une chaîne de caractères (variable de type String) qu’il faut ensuite convertir en Double (un type de données en virgule flottante).

C’est casse pied les nombres à virgules, parce que la saisie dépend de la localisation du terminal (la langue d’utilisation).

23.87 en anglais
23,87 en français

C’est le même nombre, mais l’utilisateur tapera un texte différent en fonction de la langue du terminal.

iOS contient tout ce qu’il faut pour gérer automatiquement la saisie de valeurs en fonction de la langue (Maxime en parle dans le chapitre sur la localisation des applications). Mais ce n’est pas trivial pour un novice.

En général, on commence par programmer de petites applications avec des nombres entiers, pour ne pas s’embêter avec les formats de saisie des nombres à virgule.

Une solution plus astucieuse serait de saisir les valeurs avec des sliders, ce qui règle le problème.

c’est vrais qu’un slider serait pas mal mais le soucis est que ce sont des valeur d’un plans donc extrêmement variable et un slider ne pourrais pas être la solution dans ce cas la

mais j’ai trouver une solution pour la localisation du terminal, j’ai défini le type de clavier sur « .keyboardType(.numberPad) » et ce type de clavier possède seulement le point

je pense avoir la solution pour ce problème la ainsi que de le convertir en double.

le dernier problème qui me reste c’est de pouvoir actualiser la valeur avec mon bouton car étant donné que je n’ai mit aucune valeur dans les textfield la cote ce mets automatiquement en mauvaise et lorsque je mets une autre valeur (même sans virgules) elle ne change pas et reste donc sur mauvaise comme on peut le voir ici

merci pour la réponse

ARG … c’est « Calcul » et pas « Calcule » !

Pour le reste c’est un problème d’architecture du code. Je t’explique comment régler ça demain, si personne ne le fait avant

C’est corrigé merci :sweat_smile:

Pas de soucis, et merci beaucoup

Ce petit exemple te montre comment faire des calculs sur plusieurs valeurs numériques stockées dans des textes. Et comment le programme peut détecter et réagir à des données erronées.

Si tu modifies le contenu d’une des variables textes, pour y mettre autre autre chose qu’un chiffre, la conversion vas échouer et l’application vas afficher « Données incorrectes ».

import SwiftUI

struct ContentView: View {
  
  @State private var affichage = "Etat initial"
  @State private var strA = "78.3"
  @State private var strB = "76.9"
  @State private var strC = "23"
  
    var body: some View {
        Text(affichage)
            .padding()
      Button(action:
              { calculs() } )
      {
        Text("Bouton")
      }

    }
  
  func calculs() {
    // Conversion des valeurs numériques
    if let a = Double(strA),
       let b = Double(strB),
       let c = Double(strC)
    {
      let somme = a + b + c
      affichage = String(somme)
    }
    // Echec de la conversion
    // des valeurs numériques
    else {
       affichage = "Données incorrectes"
    }
  }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

merci beaucoup je vais essayer sa tout de suite :grinning_face_with_smiling_eyes: