Introduction au problème : pourquoi NSURL et NSString sont-ils si importants ?
\n\nChaque développeur iOS rencontre tôt ou tard ce problème : vous avez un objet NSURL, mais vous devez en extraire une chaîne de caractères ordinaire — NSString (ou, dans le Swift moderne, simplement String). Cela semble simple, non ? Pourtant, de nombreux pièges se cachent ici : du décodage incorrect des caractères à la perte de fragments d'URL.
Sur Stack Overflow, la question « Convertir un NSURL en NSString » a recueilli des milliers de vues — c'est un véritable classique. Chez PythonLib, nous avons décidé d'analyser ce sujet en profondeur pour que vous ne perdiez plus jamais de temps à chercher une solution. C'est parti !
\n\nQue sont NSURL et NSString en Swift ?
\n\nAvant de passer au code, rappelons rapidement de quoi il s'agit.
\n\nNSURL est un objet représentant un localisateur uniforme de ressource (URL). Il sait décomposer les adresses en composants : schéma, hôte, chemin, paramètres, etc. En Swift, il a été remplacé par le type natif URL, mais NSURL est encore activement utilisé dans l'ancien code, Core Foundation et lors du travail avec les bibliothèques Objective-C.
NSString est une chaîne de caractères en Objective-C qui est automatiquement pontée (bridgée) vers le type String en Swift. Par conséquent, lorsque nous disons « convertir NSURL en NSString », nous obtenons en réalité soit String, soit NSString?.
Méthodes principales de conversion de NSURL en NSString
\n\nExaminons trois approches principales. Chacune convient à différents scénarios.
\n\n1. Utilisation de la propriété absoluteString
\n\nLa méthode la plus populaire et la plus simple. La propriété absoluteString renvoie la chaîne complète de l'URL, incluant tous les composants.
import Foundation\n\nlet url = NSURL(string: "https://pythonlib.ru/swift-guide?page=1&lang=ru")!\nlet urlString = url.absoluteString\n\nprint(urlString) // "https://pythonlib.ru/swift-guide?page=1&lang=ru"\n\nImportant : absoluteString renvoie une chaîne qui peut contenir un encodage en pourcentage (percent-encoding). Par exemple, les espaces apparaîtront comme %20, et le cyrillique comme %D0%9F.
2. Propriété relativeString
\n\nSi votre URL est relative (ne contient ni schéma ni hôte), relativeString renverra uniquement la partie relative.
let baseURL = NSURL(string: "https://pythonlib.ru")!\nlet relativeURL = NSURL(string: "swift-guide", relativeTo: baseURL)!\n\nlet absolute = relativeURL.absoluteString\nlet relative = relativeURL.relativeString\n\nprint(absolute) // "https://pythonlib.ru/swift-guide"\nprint(relative) // "/swift-guide"\n\nCette méthode est particulièrement utile lorsque vous travaillez avec des URL de base et des chemins relatifs.
\n\n3. Analyse manuelle des composants de l'URL
\n\nParfois, vous n'avez pas besoin de l'URL complète, mais seulement d'une partie : le chemin, l'hôte ou les paramètres. Pour cela, utilisez les propriétés de NSURLComponents ou un accès direct à NSURL.
let url = NSURL(string: "https://pythonlib.ru/ios/guide?query=swift#section1")!\n\nlet scheme = url.scheme ?? ""\nlet host = url.host ?? ""\nlet path = url.path ?? ""\nlet query = url.query ?? ""\nlet fragment = url.fragment ?? ""\n\nprint("Schéma : \\(scheme)")\nprint("Hôte : \\(host)")\nprint("Chemin : \\(path)")\nprint("Paramètres : \\(query)")\nprint("Ancre : \\(fragment)")\n\nCette approche offre un contrôle maximal sur ce que vous extrayez.
\n\nErreurs typiques et comment les éviter
\n\nMême les développeurs expérimentés trébuchent parfois sur des choses simples. Voici les trois problèmes les plus courants lors de la conversion de NSURL en NSString.
Erreur 1 : Oublier l'optionalité
\n\nNSURL(string:) renvoie un type optionnel NSURL?. Si la chaîne