web-dev-qa-db-ja.com

Objective-CでNSURLの一部を取得する

NSStringの値があります

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

第3レベルの前にすべてを入手するにはどうすればよいですか?

http://digg.com/news/
113
Melina

これはまさに第3レベルではありません。 URLはそのように分割されます:

  • プロトコルまたはスキーム(ここでは、http
  • ://区切り文字
  • ユーザー名とパスワード(ここには何もありませんが、username:password@hostnameの可能性があります)
  • ホスト名(ここでは、digg.com
  • ポート(たとえば、ドメイン名の後の:80になります)
  • パス(ここでは、/news/business/24hr
  • パラメータ文字列(セミコロンに続くもの)
  • クエリ文字列(?foo=bar&baz=frobなどのGETパラメーターがある場合)
  • フラグメント(#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の場合、必要なのはプロトコル、ホスト、および最初のパスコンポーネントです。 (-[NSString pathComponents]によって返される配列のインデックス0の要素は単に「/」なので、インデックス1の要素が必要になります。他のスラッシュは破棄されます。)

424
zneak

Using Playground , language Swift, I got this ! Playgroundは、インタラクティブな方法でこれを実際に見ることができます。 NSURLをiOSの重要なトピックとして学ぶために、同じ方法を楽しんでいただけると幸いです。

6
Kumar Utsav