Ottieni parti di una NSURL nell'obiettivo-c


114

Ho un NSString con il valore di

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

Come posso ottenere tutto prima del 3 ° livello?

http://digg.com/news/

Risposte:


435

Questo non è esattamente il terzo livello, intendiamoci. Un URL è suddiviso in questo modo:

  • il protocollo o lo schema (qui http)
  • il ://delimitatore
  • il nome utente e la password (qui non ce n'è, ma potrebbe essere username:password@hostname)
  • il nome host (qui, digg.com)
  • il porto (sarebbe :80 ad esempio dopo il nome del dominio)
  • il percorso (qui /news/business/24hr)
  • la stringa del parametro (tutto ciò che segue un punto e virgola)
  • la stringa di query (sarebbe se avessi parametri GET come ?foo=bar&baz=frob)
  • il frammento (sarebbe se avessi un'ancora nel collegamento, come #foobar).

Un URL "con funzionalità complete" sarebbe simile al seguente:

http://foobar:nicate@example.com:8080/some/path/file.html;params-here?foo=bar#baz

NSURLha una vasta gamma di accessori. Puoi controllarli nella documentazione per la NSURLclasse, sezione Accesso alle parti dell'URL . Per una rapida consultazione:

  • -[NSURL scheme] = http
  • -[NSURL resourceSpecifier] = (tutto da // alla fine dell'URL)
  • -[NSURL user] = foobar
  • -[NSURL password] = nicato
  • -[NSURL host] = esempio.com
  • -[NSURL port] = 8080
  • -[NSURL path] = /some/path/file.html
  • -[NSURL pathComponents] = @ ["/", "some", "path", "file.html"] (nota che l'iniziale / ne fa parte)
  • -[NSURL lastPathComponent] = file.html
  • -[NSURL pathExtension] = html
  • -[NSURL parameterString] = params-qui
  • -[NSURL query] = foo = bar
  • -[NSURL fragment] = baz

Quello che vorrai, però, è qualcosa del genere:

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

Per il tuo URL di esempio, ciò che sembri desiderare è il protocollo, l'host e il primo componente del percorso. (L'elemento all'indice 0 nell'array restituito da -[NSString pathComponents]è semplicemente "/", quindi ti consigliamo l'elemento all'indice 1. Le altre barre vengono scartate.)


9
per chiunque legga questo: è necessario ottenere [url.pathComponents objectAtIndex:1]invece di index 0, perché le barre sono in realtà elementi dell'array, causando l'output del codice in questa rispostahttp://digg.com//
— Dima

@Dima, buona cattura. Tuttavia, solo la prima barra è considerata un componente del percorso, le altre vengono scartate. Non sono sicuro del perché, però.
— zneak

buona cattura anche da parte tua! Non l'ho nemmeno controllato con uno solo.
— Dima

Manca il nome del file dall'elenco puntato? In questo esempio, file.htmlnon è elencato nei punti elenco: vedo che stiamo saltando dal percorso alla stringa di query ...
— Brett

2
digg.com? quanti anni ha questo post! ;-)
— Deprecato Darren l'

7

Usando Playground, language swift, ho capito! Playground offre un modo interattivo per vederlo in azione. Spero che tu possa divertirti a fare lo stesso, un modo divertente per imparare NSURL, un argomento importante in iOS.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.