Получить части NSURL в objective-c

У меня есть NSString со значением

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

Как я могу получить все до 3-го уровня?

http://digg.com/news/

Ответ 1

Это не совсем третий уровень, заметьте. URL-адрес разбивается следующим образом:

  • протокол или схема (здесь http)
  • разделитель ://
  • имя пользователя и пароль (здесь их нет, но это может быть username:[email protected])
  • имя хоста (здесь digg.com)
  • порт (который будет :80 после имени домена, например)
  • путь (здесь /news/business/24hr)
  • строка параметров (все, что следует за точкой с запятой)
  • строка запроса (это было бы, если бы у вас были параметры GET, такие как ?foo=bar&baz=frob)
  • фрагмент (это было бы, если бы у вас был якорь в ссылке, например #foobar).

"Полнофункциональный" URL-адрес будет выглядеть так:

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

NSURL имеет широкий диапазон аксессуаров. Вы можете проверить их в документации для NSURL класс, раздел Доступ к частям URL. Для быстрой справки:

  • -[NSURL scheme]= http
  • -[NSURL resourceSpecifier]= (все от//до конца URL-адреса)
  • -[NSURL user]= foobar
  • -[NSURL password]= nicate
  • -[NSURL host]= example.com
  • -[NSURL port]= 8080
  • -[NSURL path] =/some/path/file.html
  • -[NSURL pathComponents]= @[ "/", "some", "path", "file.html" ] (обратите внимание, что исходный/является его частью)
  • -[NSURL lastPathComponent]= file.html
  • -[NSURL pathExtension]= html
  • -[NSURL parameterString]= params-here
  • -[NSURL query]= foo = bar
  • -[NSURL fragment]= baz

Однако вам нужно что-то подобное:

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

Для вашего примерного URL то, что вам кажется нужным, это протокол, хост и первый компонент пути. (Элемент с индексом 0 в массиве, возвращаемом -[NSString pathComponents], просто "/", поэтому вам понадобится элемент с индексом 1. Другие косые черты отбрасываются.)

Ответ 2

Использование Playground, язык swift, я получил это! Игровая площадка обеспечивает интерактивный способ увидеть это в действии. Надеюсь, вы сможете наслаждаться тем же самым, интересным способом научиться NSURL важной теме в iOS.