Objective-c에서 NSURL의 일부 가져 오기


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] = @ [ "/", "some", "path", "file.html"] (이니셜 /이 그 일부임을 참고)
  • -[NSURL lastPathComponent] = file.html
  • -[NSURL pathExtension] = html
  • -[NSURL parameterString] = 여기에 params
  • -[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에있는 요소를 원할 것입니다. 다른 슬래시는 버려집니다.)


9
이것을 읽는 모든 사람을 위해 : 슬래시가 실제로 배열의 요소이기 때문에 [url.pathComponents objectAtIndex:1]index 대신 0http://digg.com//
Dima

@ 디마, 좋은 캐치. 그러나 첫 번째 슬래시 만 경로 구성 요소로 간주되고 나머지는 버려집니다. 그래도 이유는 잘 모르겠습니다.
zneak

당신도 잘 잡아! 한 명으로도 확인하지 않았습니다.
Dima

글 머리 기호 목록에서 파일 이름이 누락 되었습니까? 이 예에서는 file.html글 머리 기호에 나열되지 않습니다. 경로에서 쿼리 문자열로
Brett

2
digg.com? 이 게시물은 몇 살입니까! ;-)
Deprecated Darren

7

Playground, 빠른 언어를 사용하여 이것을 얻었습니다! Playground는이를 실제로 볼 수있는 대화 형 방법을 제공합니다. iOS에서 중요한 주제 인 NSURL을 배울 수있는 재미있는 방법이 되셨기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.