2012-05-01 7 views
7

Przeczytałem dokumentację i wygląda na to, że niektóre przypadki skrajne mogą być inne (końcowe ukośniki itd.), Ale nie jest dla mnie jasne, jaka jest główna różnica między tymi dwiema metodami. Czy terminy Komponent i Rozszerzenie mają specjalne znaczenie w świecie adresów URL, które rozumieją ludzie spoza mnie?UrlByAppendingPathComponent vs UrlByAppendingPathExtension

Odpowiedz

15

Rozszerzenie ścieżki służy do dodawania elementów takich jak .html do adresu URL, a komponent ścieżki służy do dodawania elementów, takich jak /news/local. Dokumentacja rozszerzenia ścieżki:

Jeśli oryginalny adres URL kończy się jednym lub większą liczbą ukośników, zostaną one usunięte ze zwróconego adresu URL. Między dwiema częściami nowego adresu URL wstawiany jest kropka.

Więc http://hello.com/news/ staną http://hello.com/news.html

Docs dla składnika ścieżki:

Jeśli oryginalny URL nie kończy się ukośnikiem i pathComponent nie rozpoczyna się ukośnikiem, do przodu slash jest wstawiany między dwie części zwróconego adresu URL, chyba że pierwotny URL jest pustym łańcuchem.

Więc http://hello.com/news/ staną http://hello.com/news/html

Oto szybki test:

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

wyjściowa:

http://hello.com/news/local 
http://hello.com/news.local 
+1

Okazuje się, że żadna z tych metod nie jest naprawdę tym, czego chcę. Myślę, że rozszerzenie oznacza rozszerzenie pliku, a składnik oznacza "węzeł między ukośnikami". W rzeczywistości, jeśli użyjesz przystawki z komponentem, dodany komponent zostanie wstawiony przed parametrami zapytania w adresie URL. To nie jest wcale jasne z dokumentacji i to właśnie spowodowało moje pytanie. Musiałem wrócić do łańcucha znaków, wykonać pracę, a następnie ponownie przekonwertować na adres URL. W każdym razie ta odpowiedź jest doskonałym przykładem tego, jak te metody powinny być stosowane. –

3

Ilekroć mam pytania o takie rzeczy, a dokumentacja nie jest pomagając, po prostu testuję to w logicznym teście.

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

Tak, jest, rozszerzenie jest. (File-type) tam składnik jest/(katalog).