Skip to content

Instantly share code, notes, and snippets.

@philippe86220
Last active December 7, 2025 09:21
Show Gist options
  • Select an option

  • Save philippe86220/76522bd996e100db87b2cbb03582e935 to your computer and use it in GitHub Desktop.

Select an option

Save philippe86220/76522bd996e100db87b2cbb03582e935 to your computer and use it in GitHub Desktop.
Propriété calculée sur deux chiffres avec opérateur variable

Explications détaillées du fonctionnement

Ce document explique pas à pas, et de manière pédagogique, le fonctionnement du code de la mini-calculatrice SwiftUI.


1. L’énumération Operateur

Déclaration de l’énum

enum Operateur: String, CaseIterable

  • enum : permet de regrouper des valeurs symboliques (+, -, *, /).
  • : String : chaque cas possède une valeur brute (rawValue) de type String, utile pour l’affichage.
  • CaseIterable : permet de parcourir tous les cas automatiquement via Operateur.allCases.

Définition des cas

  • .addition = "+"
  • .soustraction = "-"
  • .multiplication = "*"
  • .division = "/"

Chaque opérateur est associé à son symbole d’affichage.

Méthode appliquer(_:_:)

Cette méthode exécute l'opération correspondant à l’opérateur sélectionné.

Elle prend :

  • deux Double (a et b),
  • et retourne le résultat du calcul.

Un switch self détermine l’opération à effectuer :

  • .additiona + b
  • .soustractiona - b
  • .multiplicationa * b
  • .division → renvoie 0 si b == 0 (pour éviter une division par zéro), sinon a / b.

Cette fonction regroupe toute la logique mathématique dans un seul endroit.


2. Propriétés d’état (@State)

@State private var chiffre1 = ""

@State private var chiffre2 = ""

Ces deux variables contiennent ce que l’utilisateur tape dans les TextField.
Elles sont de type String, car un champ texte ne manipule pas des nombres directement.

@State private var operateur: Operateur = .addition

Variable représentant l'opérateur sélectionné.
Elle est liée au Picker grâce à un binding ($operateur).


3. La propriété calculée resultat

Conversion des valeurs

Double(chiffre1) ?? 0
Double(chiffre2) ?? 0

Chaque saisie est transformée en Double.
Si la conversion échoue (champ vide ou valeur incorrecte), la valeur tombe automatiquement à 0.

Application de l’opérateur

operateur.appliquer(n1, n2)

La logique du calcul est entièrement déléguée à l’énumération Operateur.
Cela rend la propriété calculée extrêmement simple.

Conversion pour l'affichage

Le résultat final est transformé en String pour être affiché dans la vue.


4. Le Picker des opérateurs

Le Picker permet de choisir l’opérateur qui sera appliqué.

  • selection: $operateur lie le choix de l’utilisateur à la variable d’état operateur.
  • ForEach(Operateur.allCases) liste automatiquement +, -, *, /.
  • Text(op.rawValue) affiche le symbole de l’opérateur.
  • .tag(op) permet au Picker d’associer la bonne valeur à operateur.

Le style .segmented transforme le Picker en boutons alignés (comme ceux d’un onglet).


5. Les champs texte (saisie des nombres)

Deux TextField permettent la saisie des nombres.

Gestion de la virgule française

L’utilisateur peut saisir 2,5.
Mais Swift attend 2.5 pour faire un Double.

Grâce à .onChange(of:) :

  • si le texte contient une virgule,
  • elle est remplacée par un point,
  • ce qui garantit la conversion correcte en Double.

Style visuel

  • .font(.title) rend le champ lisible.
  • .padding(20) ajoute de l’espace pour plus de confort.

6. Affichage du résultat

Un simple texte :
Text("resultat : \(resultat)")

  • utilise l’interpolation \(resultat) pour afficher la valeur calculée,
  • applique un style .font(.title),
  • et rend le texte sélectionnable et copiable .textSelection(.enabled).

7. Organisation générale

Tout est regroupé dans une VStack, ce qui :

  • aligne les éléments verticalement,
  • rend le code lisible,
  • centralise l’interface de la mini-calculatrice.

padding() final ajoute de l’espace autour de la vue pour aérer l’ensemble.


Résumé

Ce projet illustre plusieurs concepts importants de SwiftUI :

✔ Utiliser un enum pour exploiter les opérateurs dans une propriété calculée

✔ Déléguer les calculs à une méthode propre (appliquer)

✔ Utiliser une propriété calculée pour garder un code simple

✔ Gérer l’état utilisateur avec @State

✔ Convertir les saisies texte en nombres de manière robuste

✔ Utiliser un Picker pour choisir entre plusieurs opérations

Le résultat est une calculatrice claire, pédagogique et facile à étendre.

import SwiftUI
enum Operateur: String, CaseIterable {
case addition = "+"
case soustraction = "-"
case multiplication = "*"
case division = "/"
func appliquer(_ a: Double, _ b: Double) -> Double {
switch self {
case .addition: return a + b
case .soustraction: return a - b
case .multiplication: return a * b
case .division: return b == 0 ? 0 : a / b
}
}
}
struct ContentView: View {
@State private var chiffre1 = ""
@State private var chiffre2 = ""
@State private var operateur: Operateur = .addition
private var resultat: String {
let n1 = Double(chiffre1) ?? 0
let n2 = Double(chiffre2) ?? 0
return String(operateur.appliquer(n1, n2))
}
var body: some View {
VStack {
Picker("Opérateur", selection: $operateur) {
ForEach(Operateur.allCases, id: \.self) { op in
Text(op.rawValue).tag(op)
}
}
.pickerStyle(.segmented)
TextField("entrez chiffre 1 ",text: $chiffre1)
.onChange(of: chiffre1) { oldValue, newValue in
if newValue.contains(",") {
chiffre1 = newValue.replacingOccurrences(of: ",", with: ".")
}
}
.font(.title)
.padding(20)
TextField("entrez chiffre 2 ",text: $chiffre2)
.onChange(of: chiffre2) { oldValue, newValue in
if newValue.contains(",") {
chiffre2 = newValue.replacingOccurrences(of: ",", with: ".")
}
}
.font(.title)
.padding(20)
Text("resultat : \(resultat)")
.font(.title)
.textSelection(.enabled)
}
.padding()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment