2012-05-01 2 views
7

Я прочитал документацию, и похоже, что некоторые случаи кросс могут быть разными (трейлинг-косые черты и т. Д.), Но мне непонятно, какое основное различие между этими двумя методами. Используют ли термины «Компонент и расширение» особый смысл в мире URL, который люди, кроме меня, понимают?UrlByAppendingPathComponent vs UrlByAppendingPathExtension

ответ

15

Расширение пути предназначено для добавления таких объектов, как .html, и компонент пути для добавления таких вещей, как /news/local. Документация для расширения пути:

Если исходный URL-адрес заканчивается одной или несколькими косыми чертами, они удаляются из возвращаемого URL-адреса. Между двумя частями нового URL-адреса вставлен период.

Так http://hello.com/news/ станет http://hello.com/news.html

Документов для компонента пути:

Если исходный URL не заканчивается с косой чертой и pathComponent не начинается с косыми чертами, передней косая черта вставлена ​​между двумя частями возвращаемого URL-адреса, если исходный URL-адрес пустой строки.

Так 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 
+1

Итак, оказывается, что ни один из этих методов не является тем, чего я хочу. Я предполагаю, что расширение означает расширение файла, а компонент означает «узел между косой чертой». Фактически, если вы используете append с компонентом, добавляемый вами компонент вставлен перед любыми параметрами запроса в URL. Это не совсем ясно из документации, и это вызвало мой вопрос. Мне пришлось вернуться к строке, сделать работу, а затем снова перейти на URL-адрес. В любом случае этот ответ является прекрасным примером того, как эти методы должны использоваться. –

3

Всякий раз, когда у меня есть вопросы о том, как это, и документация не помогая, я просто тестирую его в логическом тесте.

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); 

Так оно и есть, расширение является. (Тип файла), там компонент/(каталог).

Смежные вопросы