web-dev-qa-db-fra.com

Obtenir des parties d'un NSURL dans objective-c

J'ai un NSString avec la valeur de

http://digg.com/news/business/24hr

Comment puis-je tout obtenir avant le 3ème niveau?

http://digg.com/news/
113
Melina

Ce n'est pas exactement le troisième niveau, remarquez. Une URL est divisée comme suit:

  • le protocole ou le schéma (ici, http)
  • le :// délimiteur
  • le nom d'utilisateur et le mot de passe (ici il n'y en a pas, mais ça pourrait être username:password@hostname)
  • le nom d'hôte (ici, digg.com)
  • le port (ce serait :80 après le nom de domaine par exemple)
  • le chemin (ici, /news/business/24hr)
  • la chaîne de paramètre (tout ce qui suit un point-virgule)
  • la chaîne de requête (ce serait le cas si vous aviez des paramètres GET comme ?foo=bar&baz=frob)
  • le fragment (ce serait si vous aviez une ancre dans le lien, comme #foobar).

Une URL "complète" ressemblerait à ceci:

http://foobar:[email protected]:8080/some/path/file.html;params-here?foo=bar#baz

NSURL dispose d'une large gamme d'accesseurs. Vous pouvez les vérifier dans la documentation de la classe NSURL , section Accès aux parties de l'URL . Pour référence rapide:

  • -[NSURL scheme] = http
  • -[NSURL resourceSpecifier] = (tout de // à la fin de l'URL)
  • -[NSURL user] = foobar
  • -[NSURL password] _ niquer
  • -[NSURL Host] = exemple.com
  • -[NSURL port] = 8080
  • -[NSURL path] = /some/path/file.html
  • -[NSURL pathComponents] = @ ["/", "un peu", "chemin", "fichier.html"] (notez que l'initiale/en fait partie)
  • -[NSURL lastPathComponent] = fichier.html
  • -[NSURL pathExtension] = html
  • -[NSURL parameterString] = params-here
  • -[NSURL query] = toto = barre
  • -[NSURL fragment] = baz

Ce que vous voudrez cependant, c'est quelque chose comme ça:

NSURL* url = [NSURL URLWithString:@"http://digg.com/news/business/24hr"];
NSString* reducedUrl = [NSString stringWithFormat:
    @"%@://%@/%@",
    url.scheme,
    url.Host,
    url.pathComponents[1]];

Pour votre exemple d'URL, ce que vous semblez vouloir, c'est le protocole, l'hôte et le premier composant de chemin. (L'élément d'indice 0 dans le tableau retourné par -[NSString pathComponents] est simplement "/", vous voudrez donc que l'élément soit à l'index 1. Les autres barres obliques sont supprimées.)

424
zneak

Using Playground , language Swift, I got this ! Le terrain de jeu offre un moyen interactif de voir cela en action. J'espère que vous pourrez en profiter, une façon amusante d'apprendre NSURL, un sujet important sur iOS.

6
Kumar Utsav