Получить части NSURL в объективе-C - PullRequest
112 голосов
/ 12 сентября 2010

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

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

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

http://digg.com/news/

Ответы [ 2 ]

422 голосов
/ 12 сентября 2010

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

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

«Полнофункциональный» URL будет выглядеть так:

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

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

  • -[NSURL scheme] = http
  • -[NSURL resourceSpecifier] = (все от // до конца URL)
  • -[NSURL user] = foobar
  • -[NSURL password] = никат
  • -[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] = баз

Тем не менее, вы захотите что-то вроде этого:

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. Другие слэши отбрасываются.)

6 голосов
/ 30 ноября 2016

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

...