Parcours
/
Swift
Swift
/
Exercices
/
La boutique de panneaux personnalisés de Cal
La boutique de panneaux personnalisés de Cal

La boutique de panneaux personnalisés de Cal

Exercice d'apprentissage

Introduction

Une chaîne de caractères représente des données textuelles. En Swift, une String est une collection ordonnée de valeurs Character, où chaque caractère représente un caractère Unicode.

On crée une string à l'aide d'un littéral de chaîne, c'est-à-dire une suite de caractères entourée de guillemets doubles ("). Pour les chaînes sur plusieurs lignes, utilise trois guillemets doubles (""") :

let hello: String = "Hello, World!"

let poem: String = """
Roses are red,
Violets are blue.
Sugar is sweet,
And so are you.
"""

Les strings Swift s'intègrent parfaitement à la classe NSString du framework Foundation, ce qui donne accès à de nombreuses capacités de traitement de texte.

Characters

Un Character représente un seul groupe de graphèmes étendu, c'est-à-dire un caractère lisible par un humain composé d'une ou plusieurs valeurs scalaires Unicode. Une valeur scalaire Unicode est un point de code de 21 bits compris dans la plage U+0000 à U+D7FF inclus, ou U+E000 à U+10FFFF inclus.

let aChar: Character = "A"

Type Inference

Quand on écrit un littéral de chaîne, Swift en infère automatiquement le type String. Pour stocker un seul caractère dans un Character, il faut fournir une annotation de type explicite :

let aString = "A"        // Inferred as String
let aChar: Character = "A" // Explicitly typed as Character
print(type(of: aString)) // Prints String
print(type(of: aChar))   // Prints Character

// The following code will not compile:
let badChar: Character = "Too many characters"
// Error: Cannot convert value of type 'String' to specified type 'Character'

Concatenation

On peut assembler des strings à l'aide de l'opérateur d'addition (+) :

print("honey" + "comb")
// Prints "honeycomb"

On ne peut pas concaténer directement un Character à une string avec + sans d'abord convertir le caractère en string. En revanche, on peut utiliser la méthode append(_:) pour ajouter directement une string ou un caractère à une string modifiable :

var greeting = "Hello"
let world = ", world"
let period: Character = "."

greeting.append(world)
print(greeting) // Prints "Hello, world"

greeting.append(period)
print(greeting) // Prints "Hello, world."

String Interpolation

L'interpolation de string permet de construire une string en intégrant des constantes, des variables, des littéraux et des expressions à l'intérieur de littéraux de chaîne. Entoure chaque expression de parenthèses précédées d'un antislash (\( ... )) :

let radius = 5.0
let circle = "The area of a circle with radius \(radius) is \(Double.pi * radius * radius)"
print(circle) // Prints "The area of a circle with radius 5.0 is 78.53981633974483"

String and Character Properties

Les strings et les Character offrent plusieurs propriétés pour inspecter leur contenu.

String Properties

Voici les propriétés de string les plus courantes :

Property Description Example
isEmpty Renvoie true si la string ne contient aucun caractère "Hello".isEmpty vaut false
count Renvoie le nombre de caractères dans la string "Hello".count vaut 5

Pour une liste complète des propriétés, consulte la documentation Apple sur String.

Character Properties

Voici les propriétés de Character les plus courantes :

Property Description Example
isLowercase Renvoie true si le caractère est en minuscule "a".isLowercase vaut true
isUppercase Renvoie true si le caractère est en majuscule "A".isUppercase vaut true
isNumber Renvoie true si le caractère est un chiffre "1".isNumber vaut true
isWhitespace Renvoie true si le caractère est un espace " ".isWhitespace vaut true

Pour une liste complète des propriétés, consulte la documentation Apple sur Character.

Type Conversion

On peut convertir d'autres types en strings à l'aide de l'initialiseur String(_:), qui prend en charge des types standard comme Int, Double et Character :

let charX: Character = "x"
print(String(charX))     // Prints "x"
print(String(110))       // Prints "110"
print(String(Double.pi)) // Prints "3.141592653589793"

Special Characters

Les littéraux de chaîne en Swift prennent en charge plusieurs séquences d'échappement pour les caractères spéciaux :

Sequence Description
\0 Caractère nul
\\ Antislash
\t Tabulation horizontale
\n Saut de ligne (nouvelle ligne)
\r Retour chariot
\' Guillemet simple
\" Guillemet double
\u{n} Scalaire Unicode arbitraire (hexadécimal)
let quote: String = "\"Hello\", he said."
print(quote) // Prints "Hello", he said.

let unicode: Character = "\u{1F496}"
print(unicode) // Prints 💖

Instructions

Dans cet exercice, tu vas écrire du code pour aider une entreprise de panneaux à créer des messages personnalisés pour ses panneaux.

1. Crée un ensemble de strings utiles

Définis les strings constantes suivantes qui serviront à créer des panneaux :

  • birthday : contient la valeur « Birthday »
  • valentine : contient la valeur « Valentine's Day »
  • anniversary : contient la valeur « Anniversary »

2. Définis un ensemble de caractères utiles

Définis les caractères constants suivants qui serviront à créer des panneaux :

  • space : contient la valeur d'un espace (un seul espace)
  • exclamation : contient la valeur « ! »

3. Combine des phrases pour construire des messages

Implémente la fonction buildSign(for:name:), qui prend l'argument for, qui contient l'une des trois strings que tu as définies dans la première tâche, et l'argument name, qui est une string qui contient le nom de la personne à qui le panneau est destiné. Tu dois utiliser la concaténation pour construire le message du panneau, et n'oublie pas de réutiliser les constantes déjà définies. La fonction doit renvoyer le message du panneau sous forme de string.

buildSign(for: birthday, name: "Otto")
// returns "Happy Birthday Otto!"

buildSign(for: anniversary, name: "Valentina")
// returns "Happy Anniversary Valentina!"

4. Construis un panneau de remise de diplôme

Implémente la fonction graduationFor(name:year:) qui prend l'argument name, une string qui contient le nom de la personne à qui le panneau est destiné, et l'argument year, un entier qui contient l'année de remise du diplôme. Tu dois utiliser des template strings pour construire le message du panneau. La fonction doit renvoyer le message du panneau sous forme de string.

graduationFor(name: "Padma", year: 2023)
// returns "Congratulations Padma!\nClass of 2023"

5. Calcule le coût d'un panneau

Implémente la fonction costOf(sign:) qui prend l'argument sign, une string qui contient le message du panneau. Le prix de base d'un panneau est de 20 dans la devise donnée. De plus, chaque lettre coûte 2 (les espaces blancs sont pris en compte dans le calcul). La fonction doit renvoyer le coût du panneau sous forme d'entier.

costOf(sign: "Happy Birthday Grandma!")
// returns 66
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Swift Exercism

Prêt à commencer La boutique de panneaux personnalisés de Cal ?

Inscris-toi sur Exercism pour apprendre et maîtriser Swift avec 35 concepts116 exercices, et un vrai mentorat humain, le tout gratuitement.