ドキュメントを読んだところ、いくつかのエッジ ケース (末尾のスラッシュなど) が異なるように見えますが、これら 2 つの方法の主な違いが何であるかは明確ではありません。コンポーネントと拡張という用語は、URL の世界で、私以外の人が理解できる特別な意味を持っていますか?
質問する
8036 次
2 に答える
18
パス拡張子は.html
URL に などを追加するためのもので、パス コンポーネントは などを追加するためのものです/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 に答える