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
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
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).
- 1. metoda vs funkcja vs procedura vs klasa?
- 2. body.scrollTop vs documentElement.scrollTop vs window.pagYOffset vs window.scrollY
- 3. Opa vs Dart vs Haxe vs coffeescript
- 4. VS 2008 vs VS 2008 Express
- 5. Strona vs Extent vs. Segment vs. Tabele
- 6. Crystalspace vs. Irrlicht vs. .....?
- 7. NetSqlAzMan vs AzMan vs (?????)
- 8. SpiderMonkey vs JavaScriptCore vs?
- 9. Klasa vs pakiet vs moduł vs komponent vs kontener kontra serwis vs platforma w świecie Java
- 10. Zmierz czas w Linuksie - czas vs zegar vs getrusage vs clock_gettime vs gettimeofday vs timespec_get?
- 11. IDataErrorInfo vs ValidationRule vs Exception
- 12. Boo vs C# vs Python?
- 13. DbConnection vs OleDbConnection vs OdbcConnection
- 14. Matlab vs Aforge vs OpenCV
- 15. DDS vs AMQP vs ZeroMQ
- 16. ScheduledExecutorService vs Timer vs Handler
- 17. flume vs kafka vs inni
- 18. ActiveMQ vs Apollo vs Kafka
- 19. getBBox() vs getBoundingClientRect() vs getClientRects()
- 20. Object vs Class vs Function
- 21. Wskaźniki vs auto_ptr vs shared_ptr
- 22. fadeIn fadeOut vs vs fadeTo
- 23. DMD vs. GDC vs. LDC
- 24. select vs poll vs epoll
- 25. Xamarin vs. Mono vs. Monodevelop
- 26. rmi vs servlets vs gniazda
- 27. filter_var vs htmlentities vs htmlspecialchars
- 28. managedQuery() vs context.getContentResolver.query() vs android.provider.something.query()
- 29. getchar_unlocked() VS scanf() VS cin
- 30. HttpRequest vs HttpRequestMessage vs HttpRequestBase
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. –