10

ドキュメントを読んだところ、いくつかのエッジ ケース (末尾のスラッシュなど) が異なるように見えますが、これら 2 つの方法の主な違いが何であるかは明確ではありません。コンポーネントと拡張という用語は、URL の世界で、私以外の人が理解できる特別な意味を持っていますか?

4

2 に答える 2

18

パス拡張子は.htmlURL に などを追加するためのもので、パス コンポーネントは などを追加するためのものです/news/local。パス拡張のドキュメント:

元の URL が 1 つ以上のスラッシュで終わっている場合、これらは返される URL から削除されます。新しい URL の 2 つの部分の間にピリオドが挿入されます。

そうhttp://hello.com/news/なるだろうhttp://hello.com/news.html

パス コンポーネントのドキュメント:

元の URL がスラッシュで終わっておらず、pathComponent がスラッシュで始まっていない場合、元の URL が空の文字列でない限り、返された URL の 2 つの部分の間にスラッシュが挿入されます。

そうhttp://hello.com/news/なるだろうhttp://hello.com/news/html

簡単なテストは次のとおりです。

NSURL *originalURL = [NSURL URLWithString:@"http://hello.com/news"];
NSLog(@"%@", [originalURL URLByAppendingPathComponent:@"local"]);
NSLog(@"%@", [originalURL URLByAppendingPathExtension:@"local"]);

出力:

http://hello.com/news/local
http://hello.com/news.local
于 2012-05-01T21:36:00.293 に答える
4

このようなことについて質問があり、ドキュメントが役に立たないときはいつでも、ロジック テストでテストするだけです。

NSURL *baseURL = [NSURL URLWithString:@"http://foo.com/bar/baz"];
NSURL *appendExtension = [baseURL URLByAppendingPathExtension:@"qux"];
NSURL *appendComponent = [baseURL URLByAppendingPathComponent:@"qux"];

STAssertEqualObjects([appendExtension absoluteString], @"http://foo.com/bar/baz.qux", nil);
STAssertEqualObjects([appendComponent absoluteString], @"http://foo.com/bar/baz/qux", nil);

つまり、拡張子は .(file-type) で、コンポーネントは /(directory) です。

于 2012-05-01T21:47:51.947 に答える