2010-09-11 15 views

Respuesta

390

Este no es exactamente el tercer nivel, te lo aseguro. Una URL se divide como de esa manera:

  • el protocolo o esquema (en este caso, http)
  • el delimitador ://
  • el nombre de usuario y la contraseña (en este caso no hay ninguna, pero podría ser username:[email protected])
  • el nombre de host (en este caso, digg.com)
  • el puerto (que sería :80 después de que el nombre de dominio, por ejemplo)
  • el camino (en este caso, /news/business/24hr)
  • la serie de parámetros (cualquier cosa que sigue a un punto y coma)
  • la cadena de consulta (que sería si usted tenía conseguir parámetros como ?foo=bar&baz=frob)
  • el fragmento (que sería si tuviera un ancla en el enlace , como #foobar).

Una URL "con todas las funciones" se vería así:

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

NSURL tiene una amplia gama de métodos de acceso. Puede consultarlos en la documentación de la clase NSURL, sección Accediendo a las partes de la URL. Para referencia rápida:

  • -[NSURL scheme] = http
  • -[NSURL resourceSpecifier] = (todo, desde // hasta el final de la dirección URL)
  • -[NSURL user] = foobar
  • -[NSURL password] = carse
  • -[NSURL host] = example.com
  • -[NSURL port] = 8080
  • -[NSURL path] =/some/pat h/file.html
  • -[NSURL pathComponents] = @ [ "/", "algunos", "camino", "file.html"] (Nótese que el inicial/es parte de ella)
  • -[NSURL lastPathComponent] = archivo.html
  • -[NSURL pathExtension] = html
  • -[NSURL parameterString] = params-aquí
  • -[NSURL query] = foo = bar
  • -[NSURL fragment] = Baz

Lo que usted quiere, sin embargo, es algo así:

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

Para su URL de ejemplo, lo que parece querer es el protocolo, el hos t y el primer componente de ruta. (El elemento en el índice 0 en la matriz devuelta por -[NSString pathComponents] es simplemente "/", por lo que desea que el elemento en el índice 1. Las otras barras se descartan.)

+2

muchas gracias – Melina

+0

impresionante respuesta hombre, gracias! –

+9

para cualquiera que lea esto: necesita obtener '[url.pathComponents objectAtIndex: 1]' en lugar del índice '0', porque las barras son en realidad elementos de la matriz, haciendo que el código de esta respuesta muestre' http: // digg.com // ' – Dima

3

Using Playground , language swift, I got this ! Zona de juegos ofrece una manera interactiva de ver esto en acción. Espero que puedan disfrutar haciendo lo mismo, una forma divertida de aprender NSURL un tema importante en iOS.