Convertir NSURL en NSString en Swift : guide complet avec exemples

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

Introduction au problème : pourquoi NSURL et NSString sont-ils si importants ?

\n\n

Chaque 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.

\n\n

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\n

Que sont NSURL et NSString en Swift ?

\n\n

Avant de passer au code, rappelons rapidement de quoi il s'agit.

\n\n

NSURL 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.

\n\n

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?.

\n\n

Méthodes principales de conversion de NSURL en NSString

\n\n

Examinons trois approches principales. Chacune convient à différents scénarios.

\n\n

1. Utilisation de la propriété absoluteString

\n\n

La 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.

\n\n
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\n

Important : 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.

\n\n

2. Propriété relativeString

\n\n

Si votre URL est relative (ne contient ni schéma ni hôte), relativeString renverra uniquement la partie relative.

\n\n
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\n

Cette méthode est particulièrement utile lorsque vous travaillez avec des URL de base et des chemins relatifs.

\n\n

3. Analyse manuelle des composants de l'URL

\n\n

Parfois, 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.

\n\n
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\n

Cette approche offre un contrôle maximal sur ce que vous extrayez.

\n\n

Erreurs typiques et comment les éviter

\n\n

Mê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.

\n\n

Erreur 1 : Oublier l'optionalité

\n\n

NSURL(string:) renvoie un type optionnel NSURL?. Si la chaîne

Blogs

Book Recommendations