4 juillet 2025 - Swift et Functions - Découverte des paramètres et valeurs de retour
Nous y voilà ! 30ème jour de formation au total et 7ème jour des 100 Days avec SwiftUI.
J’ai passé une nuit un peu agitée mais finalement reposante.
Aujourd’hui, on commence vraiment à entrer dans le vif du sujet avec les fonctions en Swift. Les notions précédentes étaient plutôt fondamentales et communes à d’autres langages, mais maintenant on découvre de plus en plus les spécificités de Swift !
#
Apprentissages du jour
##
Les fonctions : première approche
Une fonction en Swift, c’est un bloc de code réutilisable qui peut recevoir des données (les paramètres) et potentiellement retourner un résultat.
###
Paramètres et arguments
Petite distinction importante :
- Paramètres : ce qu’on définit dans la fonction (les variables)
- Arguments : les valeurs concrètes qu’on passe quand on appelle la fonction
func showWelcome(day: Int, name: String = "You") {
print("Hello & Welcome \(name)...")
print("This is Day \(day) of 100 Days with SwiftUI!")
}
showWelcome(day: 7, name: "Alessandro")
Tip : Les paramètres avec une valeur par défaut sont toujours définis à la fin de la fonction
##
Valeurs de retour
Les fonctions peuvent nous retourner des valeurs. C’est là que ça devient vraiment utile !
###
Retour simple
func rollDice(dice: Int) -> Int {
return Int.random(in: 1...dice)
}
###
Optimisation syntaxique
Swift nous permet d’omettre le mot return quand la fonction ne contient qu’une seule expression :
func compareString(str1: String, str2: String) -> Bool {
str1.sorted() == str2.sorted() // pas besoin de "return" ici
}
##
Retourner plusieurs valeurs
###
Avec des arrays
func getUser() -> [String] {
["Taylor", "Swift"]
}
Le problème : on doit se souvenir que l’index 0 est le prénom et l’index 1 le nom. Pas très pratique !
###
Avec des tuples (la meilleure option)
func getUser2() -> (firstName: String, lastName: String) {
(firstName: "Taylor", lastName: "Swift")
}
let (firstName, lastName) = getUser2()
Les tuples permettent de nommer les valeurs retournées, ce qui rend le code beaucoup plus lisible et moins sujet aux erreurs.
##
Personnalisation des labels de paramètres
Swift offre une grande flexibilité pour nommer les paramètres :
###
Supprimer le label externe
func isUppercase(_ string: String) -> Bool {
string == string.uppercased()
}
let result = isUppercase(string) // pas besoin de "string:"
###
Créer un label personnalisé
func printTimesTable(for number: Int) {
for i in 1...10 {
print("\(i) x \(number) is \(i * number)")
}
}
printTimesTable(for: 5) // plus lisible que "number: 5"
#
Exercices pratiques et découvertes
##
Calcul d’aire avec paramètre par défaut
func calculateSquareArea(height: Int, width: Int = 1) -> Int {
width * height
}
Appris : Les paramètres avec valeur par défaut sont toujours en fin de fonction.
##
Conversion de température
func convertCelsiusToFahrenheit(_ celsius: Double) -> Double {
(celsius * 9/5) + 32
}
Appris : Utiliser Double plutôt qu’Int pour les divisions, même si les paramètres sont entiers.
##
Détection de nombres pairs/impairs
func isOddOrEvenNumber(_ number: Int) -> String {
if number.isMultiple(of: 2) {
"Even" // pair
} else {
"Odd" // impair
}
}
Rappel important : Even = pair, Odd = impair (piège classique !).
##
Calculatrice avec tuple
func calculator(n1: Int, n2: Int) -> (sum: Int, product: Int) {
(sum: n1 + n2, product: n1 * n2)
}
let (sum, product) = calculator(n1: 2, n2: 5)
// ou accès par nom
let calculation = calculator(n1: 5, n2: 6)
print(calculation.sum)
##
Vérification de palindrome
func isPalindroma(_ str: String) -> Bool {
let strNormalized = str
.lowercased()
.replacingOccurrences(of: " ", with: "")
return strNormalized == String(strNormalized.reversed())
}
Technique apprise : Normaliser une seule fois la chaîne puis la comparer à sa version inversée.
##
Évaluation de score avec switch
func evaluateScore(of score: Int) -> String {
switch score {
case 0...49:
"Insuffisant"
case 50...69:
"Satisfaisant"
case 70...89:
"Bien"
case 90...100:
"Excellent"
default:
"Score should be between 0 and 100"
}
}
#
Découvertes bonus
##
Vérification de contenu dans une chaîne
J’ai découvert plusieurs façons de vérifier si une chaîne contient certains caractères :
// Avec une regex pour les chiffres
str.contains(/\d/)
// Vérification d'appartenance simple
let specialSet = "!@#$%^&*()-_+=[]{}|\\;:'\",.<>/?`~"
if specialSet.contains("!") {
print("Caractère spécial trouvé")
}
Note : Pas besoin de regex complexe pour des vérifications simples - Swift gère très bien les chaînes !
#
Réflexions
Cette journée marque vraiment le début des choses sérieuses avec Swift. Les labels de paramètres personnalisés et la flexibilité des tuples sont des concepts que je n’avais pas vus dans d’autres langages. C’est également impressionnant de voir à quel point Swift privilégie la lisibilité du code.
##
Rétrospective des 30 jours
Après ces 30 jours de formation, je peux dire que le plan tient la route. C’est quelque chose qui pourrait potentiellement être reproduit avec d’autres personnes pour d’autres apprentissages, pas forcément limité au développement iOS.
##
Préparation de la deuxième application portfolio
J’ai commencé à préparer la deuxième application de mon portfolio : une app de quiz et tests pour QuickTest Academy (mon deuxième client fictif).
Aujourd’hui, j’ai :
- Configuré le projet sur Claude pour stocker les informations
- Défini la personnalité de l’entreprise cliente
- Posé des questions métiers pour définir l’application
- Créé une sorte de fiche produit
##
Approche méthodologique
Je vais tout de même faire comme si je n’avais pas fait cet exercice de préparation et simuler une vraie session de collecte des besoins métiers d’une heure la semaine prochaine. L’idée est de rester dans une démarche professionnelle réaliste.
Si je sens que mes bases SwiftUI ne sont pas encore suffisantes pour attaquer le développement, je préparerai directement la troisième application (et ainsi de suite). Je ne veux pas tomber dans le piège de l’intelligence artificielle et coder sans comprendre.
##
Week-end mérité
Direction la piscine dans une heure pour une bonne session de natation, puis repos bien mérité pour le week-end !
On se retrouve lundi pour le jour 31 de formation.