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.
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"
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'
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."
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"
Les strings et les Character offrent plusieurs propriétés pour inspecter leur contenu.
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.
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.
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"
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 💖
Dans cet exercice, tu vas écrire du code pour aider une entreprise de panneaux à créer des messages personnalisés pour ses panneaux.
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 »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 « ! »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!"
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"
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
Inscris-toi sur Exercism pour apprendre et maîtriser Swift avec 35 concepts116 exercices, et un vrai mentorat humain, le tout gratuitement.