Nouvelle vie des chaînes en Swift : adieu substring, bonjour slicing

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Comment arrêter d'avoir peur de deprecated et aimer le slicing dans Swift



Si vous avez déjà écrit du code en Swift et essayé d'extraire une partie d'une chaîne, vous avez sûrement rencontré ce message effrayant : 'substring(to:)' is deprecated: Please use String slicing subscript with a 'partial range from' operator. Cela ressemble à une condamnation ? En réalité, c'est une invitation à un nouveau monde, plus sûr et plus puissant, pour travailler avec les chaînes. Comprenons ce qui s'est passé, pourquoi Apple a décidé de modifier l'API habituelle et comment maintenant « découper » correctement les chaînes dans Swift 4 et les versions ultérieures.



Pourquoi substring est-il devenu obsolète ?



La bonne vieille méthode substring(to:) fonctionnait, mais elle n'était pas... très intelligente. Elle retournait un nouvel objet Substring, qui n'était en fait qu'une « fenêtre » sur la chaîne d'origine. Cela entraînait de la confusion : vous pensiez travailler avec une chaîne indépendante, alors que vous conserviez une référence à l'ancienne mémoire. Dans Swift 4, ils ont décidé de mettre de l'ordre : désormais, toutes les opérations sur les sous-chaînes retournent le type Substring, et pour obtenir une chaîne complète, vous devez explicitement convertir le résultat. Cela semble plus compliqué ? En pratique, c'est beaucoup plus clair et plus sûr.



Faites connaissance : String slicing subscript



La nouvelle approche utilise des subscripts et des plages (ranges). Au lieu des méthodes substring(to:), substring(from:) et substring(with:), vous écrivez désormais un code qui ressemble à un travail avec des tableaux. Voici une analogie de base :



let fullString = "Привет, мир!"// Ancienne méthode (deprecated)// let oldResult = fullString.substring(to: fullString.index(fullString.startIndex, offsetBy: 6))

// Nouvelle méthodelet newResult = fullString[..<fullString.index(fullString.startIndex, offsetBy: 6)]print(newResult) // "Привет"


Vous voyez l'opérateur ..< ? C'est le fameux partial range from operator — une plage partielle « du début jusqu'à l'index spécifié, sans l'inclure ». Puissant ? Et comment.



Les trois piliers de la nouvelle approche : from, to, through



Analysons les trois scénarios principaux qui étaient auparavant couverts par les méthodes substring.



1. substring(to:) → prefix(upTo:) ou plage partielle

Vous voulez prendre tout jusqu'à un certain index ? Utilisez ..< (half-open range) ou la méthode prefix(upTo:) :



let str = "Hello, Swift"let index = str.firstIndex(of: ",") ?? str.endIndex

// Variante avec subscriptlet result1 = str[..<index]print(result1) // "Hello"

// Variante avec méthodelet result2 = str.prefix(upTo: index)print(result2) // "Hello"


2. substring(from:) → suffix(from:) ou plage partielle

Besoin de prendre tout depuis un index jusqu'à la fin ? Utilisez ... (closed range) avec le début omis :



let startIndex = str.index(str.startIndex, offsetBy: 7)let result3 = str[startIndex...]print(result3) // "Swift"

// Ou avec la méthodelet result4 = str.suffix(from: startIndex)print(result4) // "Swift"


3. substring(with:) → plage normale

Vous voulez extraire une partie spécifique ? Indiquez simplement la plage :



let range = str.index(str.startIndex, offsetBy: 7)..<str.endIndexlet result5 = str[range]print(result5) // "Swift"

// Ou avec closed rangelet closedRange = str.index(str.startIndex, offsetBy: 7)...str.index(before: str.endIndex)let result6 = str[closedRange]print(result6) // "Swift"


Notez bien : toutes ces opérations retournent un Substring, et non un String. Si vous avez besoin d'une chaîne complète, enveloppez simplement le résultat dans String() :



let newString = String(result1)print(type(of: newString)) // String


Et qu'en est-il de prefix et suffix ? Ils ne sont pas dépréciés !



Oui, les méthodes prefix(_:), suffix

Blogs

Book Recommendations