Отримайте частини NSURL в об’єкті-c


114

У мене є NSString зі значенням

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

Як я можу отримати все до 3-го рівня?

http://digg.com/news/

Відповіді:


435

Майте на увазі, це не зовсім третій рівень. 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] = @ ["/", "деякий", "шлях", "file.html"] (зауважте, що початковий / є його частиною)
  • -[NSURL lastPathComponent] = file.html
  • -[NSURL pathExtension] = html
  • -[NSURL parameterString] = парами-тут
  • -[NSURL query] = foo = бар
  • -[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. Інші косої риски відкидаються.)


9
для тих, хто читає це: вам потрібно отримати [url.pathComponents objectAtIndex:1]замість індексу 0, оскільки косої риси - це фактично елементи масиву, що призводить до виведення коду в цій відповідіhttp://digg.com//
Діма,

@Dima, хороший улов. Однак лише першою косою рисою вважається складовою шляху, а інші відкидаються. Я не впевнений, чому.
zneak

гарний улов і з вашого боку! Я навіть не перевірив це лише одним.
Діма

Чи не вистачає нам імені файлу зі списку пунктів? У цьому прикладі file.htmlне вказано в пунктах кулі - я бачу, що ми стрибаємо зі шляху до рядка запиту ...
Бретт

2
digg.com? скільки років цій посаді! ;-)
Застарений Даррен

7

Використовуючи ігровий майданчик, швидку мову, я зрозумів це! Ігровий майданчик забезпечує інтерактивний спосіб бачити це в дії. Я сподіваюся, що вам сподобається робити те саме, цікавий спосіб вивчити NSURL важливу тему в iOS.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.