Uzyskaj części nazwy NSURL w celu-c


114

Mam NSString o wartości

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

Jak mogę zdobyć wszystko przed trzecim poziomem?

http://digg.com/news/

Odpowiedzi:


435

Pamiętaj, że to nie jest dokładnie trzeci poziom. Adres URL jest podzielony w następujący sposób:

  • protokół lub schemat (tutaj http)
  • ://ogranicznik
  • nazwa użytkownika i hasło (tutaj nie ma, ale może być username:password@hostname)
  • nazwa hosta (tutaj digg.com)
  • port (to byłoby :80 na przykład po nazwie domeny)
  • ścieżka (tutaj /news/business/24hr)
  • ciąg parametrów (wszystko, co następuje po średniku)
  • ciąg zapytania (tak by się stało, gdybyś miał parametry GET, takie jak ?foo=bar&baz=frob)
  • fragment (byłby to gdybyś miał zakotwiczenie w linku, na przykład #foobar).

„W pełni funkcjonalny” adres URL wyglądałby następująco:

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

NSURLposiada szeroką gamę akcesoriów. Możesz je sprawdzić w dokumentacji NSURLklasy, w sekcji Dostęp do części adresu URL . Szybkie odniesienie:

  • -[NSURL scheme] = http
  • -[NSURL resourceSpecifier] = (wszystko od // do końca adresu URL)
  • -[NSURL user] = foobar
  • -[NSURL password] = nicate
  • -[NSURL host] = example.com
  • -[NSURL port] = 8080
  • -[NSURL path] = / część/ścieżka/plik.html
  • -[NSURL pathComponents] = @ ["/", "trochę", "ścieżka", "plik.html"] (zwróć uwagę, że początkowy znak / jest jego częścią)
  • -[NSURL lastPathComponent] = plik.html
  • -[NSURL pathExtension] = html
  • -[NSURL parameterString] = parametry tutaj
  • -[NSURL query] = foo = bar
  • -[NSURL fragment] = baz

Jednak to, czego będziesz chciał, to coś takiego:

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

W przypadku Twojego przykładowego adresu URL wydaje się, że potrzebujesz protokołu, hosta i pierwszego składnika ścieżki. (Element pod indeksem 0 w tablicy zwrócony przez -[NSString pathComponents]to po prostu „/”, więc będziesz potrzebować elementu o indeksie 1. Pozostałe ukośniki są odrzucane.)


9
dla każdego, kto to czyta: musisz pobrać [url.pathComponents objectAtIndex:1]zamiast indeksu 0, ponieważ ukośniki są w rzeczywistości elementami tablicy, powodując, że kod w tej odpowiedzi na wyjściehttp://digg.com//
Dima

@Dima, dobry chwyt. Jednak tylko pierwszy ukośnik jest uważany za składnik ścieżki, pozostałe są odrzucane. Nie jestem jednak pewien, dlaczego.
zneak

dobry chwyt z twojej strony! Nawet nie sprawdziłem tego jednym.
Dima

Czy brakuje nazwy pliku z listy wypunktowanej? W tym przykładzie file.htmlnie jest wymieniony w punktorach - widzę, że przeskakujemy ze ścieżki do ciągu zapytania ...
Brett

2
digg.com? ile lat ma ten post! ;-)
Wycofane Darren

7

Używając Playground, język szybki, mam to! Plac zabaw zapewnia interaktywny sposób zobaczenia tego w akcji. Mam nadzieję, że spodoba ci się robienie tego samego, przyjemnego sposobu nauki NSURL, ważnego tematu w iOS.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.